Jump to content

Бенкоде

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

Недостатки

[ редактировать ]
  • Многие кодовые группы BE можно декодировать вручную. Поскольку закодированные значения часто содержат двоичные данные , декодирование может оказаться весьма сложным. Bencode не считается удобочитаемым форматом кодирования.
  • Спецификация касается кодирования символов в наборе ASCII, оставляя решение пользователям. Это приводит к появлению нескольких решений и уменьшению соответствия.

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

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

См. также

[ редактировать ]
  1. ^ Спецификация протокола BitTorrent . Архивировано 26 июля 2019 г. на Wayback Machine . BitTorrent.org. Проверено 8 октября 2018 г.
  2. ^ «Редактор BEncode» . Форумы сообщества μTorrent. 8 октября 2007 г. Архивировано из оригинала 24 октября 2014 г. . Проверено 24 октября 2014 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b8f0540389b93467daca9a160b893f1d__1722655680
URL1:https://arc.ask3.ru/arc/aa/b8/1d/b8f0540389b93467daca9a160b893f1d.html
Заголовок, (Title) документа по адресу, URL1:
Bencode - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)