Чтение и запись двоичных данных C#

Чтение и запись двоичных данных C#

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье, посвященной потокам, мы рассмотрели чтение и запись символов или байтов, с помощью классов "StreamWriter" и "StreamReader". В данной статье я бы хотел рассмотреть чтение и запись двоичных данных в C#, ведь помимо строк, можно читать и записывать другие типы данных, например "int", "double", "short", "byte". Для чтения и записи двоичных значений типов данных, которые встроены в C#, служат классы потоков "BinaryReader" и "BinaryWriter". Когда вы используете данные потоки, помните, что данные считываются и записываются во внутреннем двоичном формате, а не в удобной для чтения текстовой форме.

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

В данном классе существует метод "Write()", который является перегруженным и в качестве значений принимает встроенные в C# типы данных.

Объект данного класса вызывается следующим образом:

BinaryWriter bwriter = new BinaryWriter(Stream buffer);

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

Класс "BinaryReader" служит переходником, в который заключается байтовый поток, управляющий вводом двоичных данных. В данном классе находятся методы, предназначенные для чтения данных всех встроенных в C# типов.

Объект данного класса вызывается следующим образом:

BinaryWriter bwriter = new BinaryWriter(Stream buffer);

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

using System;
using System.Text;
using System.IO;
namespace TestApplicationForStudy
{
  class Program
  {
    static void Main(string[] args)
    {

      {// Задаём различные типы данных
        int i = 1024;
        double d = 30.5;
        byte b = 2;
        char c = 'e';
        string str = "my string";

        // Создаём объект BinaryWriter
        BinaryWriter bWriter = new BinaryWriter(new FileStream("C:\\data.dat", FileMode.OpenOrCreate));
        // Записываем все эти данные
        Console.WriteLine("Записываем " + i);
        bWriter.Write(i);
        Console.WriteLine("Записываем " + d);
        bWriter.Write(d);
        Console.WriteLine("Записываем " + b);
        bWriter.Write(b);
        Console.WriteLine("Записываем " + c);
        bWriter.Write(c);
        Console.WriteLine("Записываем " + str);
        bWriter.Write(str);
        // Не забываем закрывать поток
        // Если не закроем, то при чтении могут возникнуть ошибки с доступом
        bWriter.Close();
      }
      Console.WriteLine("*************");
      {
        int i;
        double d;
        short b;
        char c;
        string str;
        // Пытаемся прочитать данные из файла
        BinaryReader bReader = new BinaryReader(new FileStream("C:\\data.dat", FileMode.Open));
        i = bReader.ReadInt32();
        d = bReader.ReadDouble();
        b = bReader.ReadSByte();
        c = bReader.ReadChar();
        str = bReader.ReadString();
        Console.WriteLine("Читаем i = " + i);
        Console.WriteLine("Читаем d = " + d);
        Console.WriteLine("Читаем b = " + b);
        Console.WriteLine("Читаем c = " + c);
        Console.WriteLine("Читаем str = " + str);
        bReader.Close();
      }
      Console.ReadLine();
    }
  }
}

Если просмотреть содержимое файла "test", то мы увидим, что он содержит данные в двоичной форме.

В данной статье вы узнали, как читать и записывать двоичные данные в C#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *