В этой программе сначала создается массив байтов, называемыйstorage.Затем этот массив используется в качестве основной памяти для объектаmemstrmклассаMemoryStream.Из объектаmemstrm,в свою очередь, создаются объектыmemrdrклассаStreamReaderиmemwtrклассаStreamWriter.С помощью объектаmemwtrвыводимые данные записываются в запоминающий поток. Обратите внимание на то, что после записи выводимых данных для объектаmemwtrвызывается методFlush (). Это необходимо для того, чтобы содержимое буфера этого объекта записывалось непосредственно в базовый массив. Далее содержимое базового массива байтов отображается вручную в циклеfor each.После этого указатель файла устанавливается с помощью методаSeek() в начало запоминающего потока, из которого затем вводятся данные с помощью объекта потокаmemrdr.
Запоминающие потоки очень полезны для программирования. С их помощью можно, например, организовать сложный вывод с предварительным накоплением данных в массиве до тех пор, пока они не понадобятся. Этот прием особенно полезен для программирования в такой среде с графическим пользовательским интерфейсом, как Windows. Кроме того, стандартный поток может быть переадресован из массива. Это может пригодиться, например, для подачи тестовой информации в программу.
Применение классов StringReader и StringWriter
Длявыполнения операций ввода-вывода с запоминанием в некоторых приложениях в качестве базовой памяти иногда лучше использовать массив типаstring,чем массив типаbyte.Именно для таких случаев и предусмотрены классыStringReaderиStringWriter.В частности, классStringReaderнаследует от классаTextReader,а классStringWriter— от классаTextWriter.Следовательно, они представляют собой потоки, имеющие доступ к методам, определенным в этих двух базовых классах, что позволяет, например, вызывать методReadLine() для объекта классаStringReader,а методWriteLine() — для объекта классаStringWriter.
Ниже приведен конструктор классаStringReader:
StringReader(string
где s обозначает символьную строку, из которой производится чтение.
В классеStringWriterопределено несколько конструкторов. Ниже представлен один из наиболее часто используемых.
StringWriter()
Этот конструктор создает записывающий поток, который помещает выводимые данные в строку. Для получения содержимого этой строки достаточно вызвать методToString().
Ниже приведен пример, демонстрирующий применение классовStringReaderиStringWriter.
// // Продемонстрировать применение классов StringReader и StringWriter.
using System; using System.10;