WikiDer > Bencode

Bencode

Bencode (произносится как B-кодирование) - это кодировка, используемая пиринговый система обмена файлами BitTorrent для хранения и передачи слабо структурированных данных.[1]

Он поддерживает четыре разных типа значений:

Бенкодирование чаще всего используется в торрент файлы, и как таковой является частью спецификации BitTorrent. Эти метаданные файлы - это просто закодированные словари.

Хотя он менее эффективен, чем чистое двоичное кодирование,[нужна цитата] bencoding прост и (поскольку числа кодируются как текст в десятичной системе счисления) не зависит от порядок байтов, что важно для кросс-платформенный приложение вроде BitTorrent. Он также довольно гибкий, поскольку приложения игнорируют неожиданные ключи словаря, так что новые могут быть добавлены без создания несовместимости.

Алгоритм кодирования

Bencode использует ASCII символы как разделители и цифры.

  • Целое число кодируется как я<целое число, закодированное по основанию десять ASCII>е. Начальные нули не допускаются (хотя ноль по-прежнему отображается как «0»). Отрицательные значения кодируются с помощью префикса числа с дефис-минус. Таким образом, число 42 будет закодировано как i42e, 0 как i0e, и -42 как и-42э. Отрицательный ноль не допускается.
  • Строка байтов (последовательность байты, не обязательно символы) кодируется как <length>:<contents>. Длина кодируется по основанию 10, как целые числа, но должна быть неотрицательной (допускается ноль); содержимое - это просто байты, составляющие строку. Строка «спам» будет закодирована как 4: спам. Спецификация не касается кодирование символов вне набора ASCII; чтобы смягчить это, некоторые приложения BitTorrent явно передают кодировку (чаще всего UTF-8) различными нестандартными способами. Это идентично тому, как netstrings работают, за исключением того, что строки цепочки дополнительно добавляют суффикс запятой после последовательности байтов.
  • Список значений кодируется как л<contents>е . Содержимое состоит из закодированных элементов списка, соединенных по порядку. Список, состоящий из строки «спам» и числа 42, будет закодирован как: l4: spami42ee. Обратите внимание на отсутствие разделителей между элементами, и первый символ - это буква «l», а не цифра «1».
  • Словарь кодируется как d<contents>е. Элементы словаря кодируются, за каждым ключом сразу следует его значение. Все ключи должны быть байтовыми строками и должны появляться в лексикографический порядок. Словарь, который связывает значения 42 и "spam" с ключами "foo" и "bar" соответственно (другими словами, {"bar": "spam", "foo": 42}), будет закодирован следующим образом: d3: bar4: spam3: fooi42ee.

Нет ограничений на то, какие значения могут храниться в списках и словарях; они могут (и обычно содержат) другие списки и словари. Это позволяет кодировать произвольно сложные структуры данных.

Особенности и недостатки

Bencode - это очень специализированный вид двоичного кодирования с некоторыми уникальными свойствами:

  • Для каждого возможного (сложного) значения существует только одно допустимое кодирование; т.е. есть биекция между значениями и их кодировками. Это имеет то преимущество, что приложения могут сравнивать закодированные значения путем сравнения их закодированных форм, устраняя необходимость декодирования значений.
  • Многие кодовые группы BE можно декодировать вручную. Поскольку закодированные значения часто содержат двоичные данные, декодирование может стать довольно сложным. Bencode не считается человек читаемый формат кодирования.
  • Бенкодинг служит тем же целям, что и языки данных, например JSON и YAML, позволяя хранить сложные, но слабо структурированные данные в независимая платформа путь.

Однако эта уникальность может вызвать некоторые проблемы:

  • Редакторов бенкода очень мало[2]
  • Поскольку закодированные файлы содержат двоичные данные, а также из-за некоторых сложностей, связанных с тем, как обычно хранятся двоичные строки, часто небезопасно редактировать файлы Bencode в текстовых редакторах.

Смотрите также

Рекомендации

  1. ^ Спецификация протокола BitTorrent. BitTorrent.org. Проверено 8 октября 2018 года.
  2. ^ «Редактор BEncode». Форумы сообщества μTorrent. Получено 24 октября 2014.

внешняя ссылка