Главная » C# » Пересылка двоичных данных в Visual C# (Sharp)

0

По большому счету, при работе с консолью мы будем пересылать текстовые даые от одного процесса другому или из одного файла в другой файл. Но при разротке приложений в .NET работать с текстом не всегда является лучшим подходом. Более эффективно было бы хранить данные в двоичном формате.

Рис. 10.8. Двоичное содержимое файла в текстовом редакторе

Легче все понять разницу между текстовыми и двоичными данными, если открыть файл с двоичными данными в текстовом редакторе (рис. 10.8).

Все, что мы видим на рис. 10.8, — это куча крякозябров с вкраплениями читаемого текста. Двоичный файл отличается от текстового файла тем, что формат содержого, прочитанного программой, воспринимается двоичными данными. Преимеством использования двоичных данных является то, что они позволяют создание сложных структур. А недостатком — то, что содержимое двоичного файла знает только разработчик программы для его записи и чтения.

Двоичные файлы не всегда меньшего размера, но они более эффективны, т. к. их данные не требуют синтаксического разбора и обработки. Например, модуль чтия текстового потока данных лотерейных билетов должен  разбить  текстовый файл  на  строки,  а  потом  разбить  каждую  строку  в  отдельные  потоки,  которые в свою очередь преобразуются в целые числа и присваиваются переменным. С двчными данными нам нужно только создать двоичный тип, а потом считывать или записывать этот тип.

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

type lotto.txt | TextProcessor.exe | Text2Binary.exe | Binary2Text.exe

Командная строка начинается с команды type, которая генерирует поток текстовых данных. Этот поток пересылается приложению TextProcessor.exe, которое генерует упорядоченный поток данных. Далее поток пересылается приложению Text2Binary.exe, которое преобразует его в двоичный поток. Наконец, двоичный поток данных пересылается приложению Binary2Text.exe, которое выводит данные на консоль.

В то время как архитектура приложения TextProcessor с его реализацией интеейса IProcessor и общий подход захвата файла или входного/выходного потока консоли работают должным образом, интерфейс IProcessor нельзя использовать для обработки двоичных потоков. Поэтому нам требуется реализовать новый иерфейс и новую архитектуру.

ПРИМЕЧАНИЕ

Дале е  иллюстрируется  очень  распространенная  ситуация,   когда  архитектура  работт должны м образом и ее концепции можно применить в другом контексте. Но в новом контексте реализация первоначальной архитектуры не работает. Модифицировани е работающей архитектуры под новый контекст может показаться соблазнительным решением этой  проблемы. Но насколько привлекательным это бы не выглядело, не следует  поддаваться  этому  искушению.  В  большинстве  случаев   создаваемы е   дл я этого   абстракции   усложнят  архитектуру   и   сделают  конечный   код  более   запутанным. В   данно м   случае   проблемой   является   определение,   когда   обобщат ь   архитектуру, а  когда  оставить  идеи  старой  архитектуры,  но  создать  новую  реализацию.   Спосоость  делать  такое  определение  приходит  по  мере  накопления  рабочего  опыта.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

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