двоичный файл по сравнению с текстовыми протоколами

Я задаюсь вопросом, что различия между двоичными и основанными на тексте протоколами. Я считал, что протоколы двоичной синхронной передачи данных, больше уплотняет/быстрее для обработки. Как это удается? Так как необходимо отправить тот же объем данных? Нет?

Например, как строка "привет" отличалась бы по размеру в двоичном формате?

20
задан Alexander Farber 11 December 2018 в 17:04
поделиться

6 ответов

Если вы просто передаете текст, то да, разница между ними не очень существенна. Но если вы пытаетесь передать что-то вроде:

  • Числа - используете ли вы строковое представление числа или двоичное? Особенно для больших чисел, двоичное представление будет более компактным.
  • Структуры данных - как обозначить начало и конец поля в текстовом протоколе? Иногда двоичный протокол с полями фиксированной длины более компактен.
21
ответ дан 30 November 2019 в 00:22
поделиться

Текстовые протоколы лучше с точки зрения читаемости, простоты повторной реализации и простоты отладки. Бинарные протоколы более компактны.

Тем не менее, вы можете сжать свой текст, используя такую ​​библиотеку, как LZO или Zlib, и она почти такая же компактная, как двоичная (с очень небольшим снижением производительности для сжатия / распаковки).

Вы можете прочитать больше информации по этому вопросу здесь :
http://www.faqs.org/docs/artu/ch05s01.html

11
ответ дан 30 November 2019 в 00:22
поделиться

двоичные протоколы лучше, если вы используете контрольные биты / байты

, т.е. вместо отправки сообщения msg: Hello в двоичном формате это может быть 0x01, за которым следует ваше сообщение (при условии, что 0x01 - это управляющий байт, обозначающий msg)

Итак, поскольку в текстовом протоколе вы отправляете msg: hello \ 0 ... он включает 10 байтов , где, как в двоичном протоколе это будет 0x01Hello \ 0 ... это включает 7 байтов

И еще один пример, предположим, вы хотите отправить число, скажем 255, в тексте его 3 байта , а в двоичном формате - 1 байт, то есть 0xFF

2
ответ дан 30 November 2019 в 00:22
поделиться

Сама строка "hello" не будет отличаться по размеру. Разница в размере/производительности заключается в дополнительной информации, которую вносит сериализация (Сериализация - это то, как программа представляет передаваемые данные, чтобы их можно было переконструировать, когда они попадут на другой конец трубы).

Например, при сериализации следующих данных в .NET с помощью XML (один из методов сериализации текста):

string helloWorld = "Hello World!";

Вы можете получить что-то вроде (я знаю, что это не точно):

<helloWorld type="String">Hello World!</helloWorld>

В то время как двоичная сериализация сможет представить эти данные в двоичном виде без лишней разметки.

3
ответ дан 30 November 2019 в 00:22
поделиться

Вы должны четко понимать, что является частью протокола, а что - данными. Текстовые протоколы могут отправлять двоичные данные, а двоичные протоколы могут отправлять текстовые данные.

Протокол является частью сообщения, в котором говорится: «Здравствуйте, могу ли я подключиться? У меня есть данные, куда мне их поместить? Вы получили для меня ответ? Отлично! Спасибо, пока!»

Каждый бит преобразования (вероятно) намного меньше в двоичном протоколе. Возьмем, к примеру, HTTP (который основан на тексте):

, если бы у вас был стандарт кодирования, держу пари, вы могли бы придумать последовательность символов меньше, чем 4 байта, необходимые для слова "PUSH"

0
ответ дан 30 November 2019 в 00:22
поделиться

Я бы не сказал, что двоичные форматы обрабатываются быстрее. Если вы посмотрите на CSV или текстовый формат с фиксированной длиной поля - он все равно может быть обработан быстро.

Я бы сказал, все зависит от того, кто является потребителем. Если человек находится в конце (например, для HTTP или RSS), тогда нет необходимости каким-то образом сжимать данные, кроме, возможно, сжатия.

Бинарным протоколам нужны синтаксические анализаторы / преобразователи, которые трудно расширять и сохранять обратную совместимость. Чем выше вы поднимаетесь в стеке протоколов, тем более ориентированы на человека протоколы (TCP является двоичным, поскольку пакеты должны обрабатываться маршрутизаторами на высокой скорости, но XML более удобен для человека).

Я считаю, что вариации в размерах сегодня не имеют большого значения. В вашем примере, hello будет иметь такое же количество в двоичном формате, что и в текстовом формате, потому что текстовый формат также является «двоичным» для компьютера - имеет значение только то, как мы интерпретируем данные.

-4
ответ дан 30 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: