Bencode
— формат, используемый
p2p
-системой распространения файлов
BitTorrent
для хранения и передачи свободно структурированных данных.
Включает четыре типа данных:
строка байтов,
целое число,
список (массив),
словарь (ассоциативный массив).
Bencode используется в файлах
.torrent
, которые представляют собой словарь в формате Bencode.
Кодирование
Bencode использует символы
ASCII
как разделители и цифры.
Целое число записывается так:
i
<число в десятичной системе счисления>
e
. Число не должно начинаться с нуля, но число ноль записывается как i0e. Отрицательные числа записываются со знаком минуса перед числом. Число −42 будет выглядеть так «i-42e».
Строка байт:
<размер>
:
<содержимое>
. Размер — это положительное число в десятичной системе счисления, может быть нулём; содержимое — это непосредственно данные, представленные цепочкой байт, которые не подразумевают никакой символьной кодировки. Строка «spam» в этом формате будет выглядеть так «4:spam».
Список (массив):
l
<содержимое>
e
. Содержимое включает в себя любые типы Bencode, следующие друг за другом. Список, состоящий из строки «spam» и числа 42, будет выглядеть так: «l4:spami42ee».
Словарь:
d
<содержимое>
e
. Содержимое состоит из пар ключ-значение, которые следуют друг за другом. Ключи могут быть только строкой байт и должны быть упорядочены в
лексикографическом порядке
. Значение может быть любым элементом Bencode. Если сопоставить ключам «bar» и «foo» значения «spam» и 42, получится: «d3:bar4:spam3:fooi42ee». (Если добавить пробелы между элементами, будет легче понять структуру:
"d 3:bar 4:spam 3:foo i42e e"
.)
Ссылки
— реализация Bencode/decode на PHP
: Windows-GUI-редактор BEncode
: кроссплатформенный GUI-редактор BEncode
, сериализующий bencoded объекты в объекты Java (1.8) — Integer, String, LinkedList