Классы BinaryWriter и BinaryReader

79

Для чтения и записи двоичных значении встроенных в C# типов данных служат классы потоков BinaryReader и BinaryWriter. Используя эти потоки, следует иметь в виду, что данные считываются и записываются во внутреннем двоичном формате, а не в удобочитаемой текстовой форме.

Класс BinaryWriter служит оболочкой, в которую заключается байтовый поток, управляющий выводом двоичных данных. Ниже приведен наиболее часто употребляемый конструктор этого класса:

BinaryWriter(Stream output)

где output обозначает поток, в который выводятся записываемые данные. Для записи в выходной файл в качестве параметра output может быть указан объект, создаваемый средствами класса FileStream. Если же параметр output оказывается пустым, то генерируется исключение ArgumentNullException. А если поток, определяемый параметром output, не был открыт для записи данных, то генерируется исключение ArgumentException. По завершении вывода в поток типа BinaryWriter его нужно закрыть. При этом закрывается и базовый поток.

Класс BinaryReader служит оболочкой, в которую заключается байтовый поток, управляющий вводом двоичных данных. Ниже приведен наиболее часто употребляемый конструктор этого класса:

BinaryReader(Stream input)

где input обозначает поток, из которого вводятся считываемые данные. Для чтения из входного файла в качестве параметра input может быть указан объект, создаваемый средствами класса FileStream.

Если же поток, определяемый параметром input, не был открыт для чтения данных или оказался недоступным по иным причинам, то генерируется исключение ArgumentException. По завершении ввода из потока типа BinaryReader его нужно закрыть. При этом закрывается и базовый поток.

Давайте рассмотрим пример использования данных классов:

using System;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            BinaryWriter dataOut;

            int i = 10;
            double d = 1023.56;
            bool b = true;
            string str = "Это текст";

            // Открыть файл для ввода
            try
            {
                dataOut = new BinaryWriter(new FileStream("C:/testData",FileMode.Create));
            }
            catch (IOException ex)
            {
                Console.WriteLine("Ошибка открытия файла: " + ex.Message);
                return;
            }

            // Записать данные в файл
            try
            {
                Console.WriteLine("Запись " + i);
                dataOut.Write(i);
                Console.WriteLine("Запись " + d);
                dataOut.Write(d);
                Console.WriteLine("Запись "+b);
                dataOut.Write(b);
                Console.WriteLine("Запись "+str);
                dataOut.Write(str);
            }
            catch (IOException ex)
            {
                Console.WriteLine("Ошибка ввода-вывода файла: " + ex.Message);
                return;
            }
            finally
            {
                dataOut.Close();
            }
        }
    }
}
Пройди тесты
Лучший чат для C# программистов