Работа с двоичными данными

ВВОД/ВЫВОД В СРЕДЕ.NET

Платформа Microsoft.Net Framework поддерживает широкий выбор средств по работе с файловой системой (ФС) и другими способами хранения и передачи данных. Данные средства разделяются на две группы: средства работы с двоичными потоками данных (в том числе с файлами), средства чтения и записи текстовой информации. Такое разделение было заложено из-за возможности представления и работы с текстовой информацией во множестве кодировок (кодовых страниц), которые определяются экземплярами класса Encoding. Помимо этих двух групп платформа предоставляет программисту ряд утилитарных классов, облегчающих работу с ФС. Большинство типов данных, используемых при вводе/выводе, расположены в пространстве имен System.IO.

Работа с двоичными данными

Центральное место при работе с двоичными данными в среде.Net занимает абстракция потока данных, реализуемая классом Stream. Под потоком принято понимать некоторую последовательность байт, передаваемую от источника приемнику. При этом не конкретизируются особенности реализации ни источника, ни приемника, ни среды передачи, что позволяет использовать данную абстракцию при описании обмена данными с файлами на дисках (класс FileStream), между процессами в рамках компьютера и по сети (классы PipeStream, NetworkStream и др.), передачу данных с их одновременной обработкой (классы GZipStream, CryptoStream и др.) и т.д. Класс Stream описывает большое количество методов и свойств для работы с двоичными потоками данных, среди которых ключевыми являются методы Read, ReadByte, Write, WriteByte, Seek, CopyTo, Close, Flush (см. табл. 1) и свойства Length и Position. Надо помнить, что не все потоки допускают выполнение операций чтения, записи или изменения текущей позиции и их допустимость может быть проверена через значения свойств CanRead, CanWrite и CanSeek соответственно.

Таблица 1. Наиболее часто используемые методы класса Stream

Метод Описание
int Read(byte[] buffer, int offset, int count) Считывает последовательность длиной «count» байт из потока и помещает их в массив «buffer» начиная с индекса «offset». Возвращает количество считанных байт данных.
int ReadByte() Считывает из потока и возвращает один байт. В случае достижения конца потока, возвращает -1.
void Write(byte[] buffer, int offset, int count) Записывает в поток последовательность байт длиной «count», взятых из массива «buffer» начиная с индекса «offset».
void WriteByte(byte value) Записывает в поток один байт данных.
long Seek(long offset, SeekOrigin origin) Изменяет текущее положение указателя в потоке, смещая его на «offset» байт, начиная с позиции «origin».
void CopyTo(Stream destination) Копирует данные потока с текущей позиции и до конца в поток «destination».
void Close() Закрывает поток данных, освобождая системные ресурсы.
void Flush() Очищает кэш в памяти, сохраняя все измененные данные на носитель.

Наиболее часто используемым классом при работе с потоками все же остается класс FileStream – класс, предоставляющий функционал работы с двоичными файлами данных. Его экземпляр может быть получен в программе либо с использованием одного из его многочисленных конструкторов, либо с использованием утилитарных функций класса File, описанных в таблице 5.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: