Работа с классами 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 позволяют работать с файлами в двоичном представлении, реализуя удобные методы для записи и чтения данных различных типов.