Запоминающие потоки очень полезны для программирования. С их помощью можно, например, организовать сложный вывод с предварительным накоплением данных в массиве до тех пор, пока они не понадобятся. Этот прием особенно полезен для программирования в такой среде с графическим пользовательским интерфейсом, как 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;
class StrRdrWtrDemo { static void Main {
StringWriter strwtr = null;
StringReader strrdr = null;
try {
// Создать объект класса StringWriter. strwtr = new StringWriter;
// Вывести данные в записывающий поток типа StringWriter. for (int i=0; i < 10; i++)
strwtr.WriteLine("Значение i равно: " + i);
// Создать объект класса StringReader. strrdr = new StringReader(strwtr.ToString);
//А теперь ввести данные из считывающего потока типа StringReader. string str = strrdr.ReadLine; while(str != null) {
str = strrdr.ReadLine;
Console.WriteLine(str);
}
} catch(IOException exc) {
Console.WriteLine("Ошибка ввода-вывода\п" + exc.Message);
} finally {
// Освободить ресурсы считывающего и записывающего потоков, if(strrdr != null) strrdr.Close; if(strwtr != null) strwtr.Close ;
}
}
}
Вот к каком результату приводит выполнение этого кода.