TextReader, TextWriter и производные классы. Объектные потоки: сохранение и восстановление объектов.
Двоичные потоки чтения/записи хорошо подходят для случаев, когда программисту точно известен порядок следования данных в двоичном формате, но прочитать полученный файл бывает непросто. Таким образом, для хранения обычного текста в файле лучше поискать другой вариант. В этой стандартной ситуации вместо пары BinaryReader/BinaryWriter следует использовать пару StreamReader/StreamWriter. По функциональным возможностям классы StreamReader и StreamWriter близки к традиционным средствам последовательного доступа к файлам из прежних версий VB (если не считать того, что в этих классах появилась поддержка Unicode). В классе StreamReader помимо метода Read также имеется удобный метод ReadToEnd, позволяющий прочитать весь файл за одну операцию.
Обратите внимание, что эти классы объявлены производными от абстрактных классов TextReader и TextWriter, а не от Stream. Эти абстрактные классы, объявленные с атрибутом Must Inherit, содержат общие средства чтения/записи текста. Их методы перечислены в табл. 9.11 и 9.12.
Таблица 9.11. Основные методы класса TextReader.
Метод | Описание |
---|---|
Close | Закрывает существующий поток TextReader и освобождает все системные ресурсы, связанные с ним |
Peek | Возвращает следующий символ в потоке без смещения указателя текущей позиции |
Read | Читает один символ из входного потока. Перегруженная версия читает в символьный массив определенное количество символов начиная с заданной позиции |
ReadLine | Читает символы до комбинации CR+LF и возвращает их в виде строкового значения. Если текущая позиция находится в конце файла, метод возвращает Nothing |
ReadToEnd | Читает все символы от текущей позиции до конца TextReader и возвращает их в виде одной строки (метод особенно удобен при работе с небольшими файлами) |
Таблица 9.12. Основные методы класса TextWriter.
Метод | Описание |
---|---|
Close | Закрывает существующий поток TextWriter и освобождает все системные ресурсы, связанные с ним |
Write | Перегруженные версии метода позволяют записывать в поток любые базовые типы данных в текстовом формате |
WriteLine | Перегружается для записи в поток любых базовых типов данных в текстовом формате, за которыми записывается комбинация CR+LF |
Примечание
Свойства Console.In и Console.Out используемые при консольном вводе-выводе, в действительности являются экземплярами классов TextReader и TextWriter. Методы Соnsole.Setln и Console.SetOut позволяют перенаправить стандартный ввод и вывод любым классам *Reader и *Writer соответственно.
Поскольку классы TextReader и TextWriter являются абстрактными, программы работают с конкретными реализациями StreamReader и StreamWriter. Как и в случае с классами BinaryReader и BinaryWriter, при создании объектов StreamReader и StreamWriter конструктору обычно передается существующий объект потока:
myFile = New FileStreamtfileName.FileMode.Open, FileAccess.Read) textFile= New StreamReader(myFile)
Для получения объекта также можно воспользоваться методами класса File. Пример неявного создания объекта StreamReader при создании файлового потока продемонстрирован ниже:
Dim aStreamReader As StreamReader aStreamReader = File.OpenText ("sample.txt")
Объекты класса StreamWriter создаются аналогичным образом:
Dim aStreamWriter As StreamWriter aStreamWriter = File.CreateText ("test.txt")