Работа с классами BinaryWriter и BinaryReader

Классы BinaryWriter и BinaryReader являются прямыми наследниками System.Object. Эти типы позволяют читать и записывать дискретные типы данных в потоки в компактном двоичном формате.

В классе BinaryWriter определен многократно перегруженный метод Write() для помещения типов данных в лежащий в основе поток. В дополнение к Write(), класс BinaryWriter предоставляет дополнительные члены, позволяющие получать или устанавливать объекты унаследованных от Stream типов, а также поддерживает произвольный доступ к данным.

 

Основные члены BinaryWriter:

BaseStream Это свойство, предназначенное только для чтения, обеспечивает доступ к лежащему в основе потоку, используемому объектом BinaryWriter
Close() Этот метод закрывает двоичный поток
Flush() Этот метод выталкивает буфер двоичного потока
Seek() Этот метод устанавливает позицию в текущем потоке
Write() Этот метод пишет значение в текущий поток

 

Основные члены BinaryReader

BaseStream Это свойство, предназначенное только для чтения, обеспечивает доступ к лежащему в основе потоку, используемому объектом BinaryReader
Close() Закрывает двоичный поток
PeekChar() Возвращает следующий доступный символ без перемещения текущей позиции потока
Read() Читает заданный набор байт или символов и сохраняет их в переданном ему массиве
ReadXXXX() В классе BinaryReader определено множество методов чтения, которые извлекают из потока объекты разных типов (ReadBoolean(), ReadByte(), Readlnt32() и т.д.)

Пример:

Filelnfo f = new Filelnfo("BinFile.dat");

// Записать двоичные данные из потока.

using ( BinaryWriter bw = new BinaryWriter(f.OpenWrite()) )

{

// Создать некоторые данные для сохранения в файле.

double aDouble = 1234.67;

int anlnt = 34567;

string aString = "А, В, C";

// Записать данные.

bw.Write(aDouble);

bw.Write(anlnt);

bw.Write(aString);

}

// Читать двоичные данные из потока.

using ( BinaryReader br = new BinaryReader(f.OpenRead()) )

{

Console.WriteLine(br.ReadDouble());

Console.WriteLine(br.Readlnt32());

Console.WriteLine(br.ReadString());

}

 

Выводы:

· Пространство имен System.IO предоставляет классы для работы с файловой системой и осуществления ввода-вывода.

· Классы Directory/DirectoryInfo реализуют методы для работы с каталогами как объектами файловой системы, классы File/FileInfo – с файлами.

· Потоки – абстракция для взаимодействия с произвольной последовательностью байт в одинаковой манере вне зависимости от источника данных.

· Класс FileStream предоставляет наиболее абстрактную реализацию файлового потокового ввода/вывода, позволяя читать и записывать одиночные байты или последовательности байт.

· Классы StreamWriter/StreamReader реализуют работу с фалами как с потоками текстовой информации

· Классы StringReader/StringWriter аналогичны Stream… классам, но работают не с файлом, а со строкой в качестве источника/приемника данных

· Классы BinaryReader/BinaryWriter позволяют работать с файлами в двоичном представлении, реализуя удобные методы для записи и чтения данных различных типов.