В основе библиотеки ввода/вывода текстовой информации в среде.Net лежат два абстрактных класса: TextReader и TextWriter. Каждый из них определяет ряд функциональных примитивов, обеспечивающих соответственно чтение и запись текста, и общих для всех потомков данных классов. Основные методы класса TextReader приведены в таблице 2, а класса TextWriter – в таблице 3.
Таблица 2. Ключевые методы класса TextReader
Метод/Свойство | Описание |
int Read() | Считывает из текстового потока один символ в виде его кода. В случае достижения конца потока или других ошибок возвращает -1. |
int ReadBlock(char[] buffer, int index, int count) | Считывает последовательность символов длиной «count» в текстовый массив «buffer», размещая их, начиная с позиции «index» в массиве. |
string ReadLine() | Считывает и возвращает текст с текущей позиции до конца строки. |
string ReadToEnd() | Считывает и возвращает текст с текущей позиции до конца текстового потока. |
Таблица 3. Ключевые методы класса TextWriter
Метод/Свойство | Описание |
void Flush() | Сбрасывает незаписанные изменения на носитель, очищая внутренние буферы потока вывода. |
string NewLine { get; set; } | Определяет последовательность символом, определяющую конец текстовой строки и перевод на новую строчку. Значение данного свойства специфично для различных ОС. |
void Write(…) | Сохраняет переданные данные в текстовый поток. Формат и поведение данных методов аналогично функции Write класса Console. |
void WriteLine(…) | Сохраняет переданные данные в текстовый поток вставляя после записанных данных признак конца строки. Формат и поведение данных методов аналогично функции WriteLine класса Console. |
Реализацией описанной функциональности занимаются классы StreamReader/Writer, StringReader/Writer. Первый из них организует текстовый ввод/вывод, используя двоичные потоки данных в качестве основы, второй – осуществляет надстройку над текстовой строкой в памяти (типов System.String), позволяя применять к ней идеологию доступа на основе текстовых потоков. Получить конкретные экземпляры данных классов можно либо через их конструкторы, либо (для классов StreamReader/Writer) через утилитарные функции класса File, описанные ниже.