Bencode - Bencode
![]() | tento článek potřebuje další citace pro ověření.září 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Bencode (vyslovuje se jako B-kódování) je kódování používané peer-to-peer systém sdílení souborů BitTorrent pro ukládání a přenos volně strukturovaných dat.[1]
Podporuje čtyři různé typy hodnot:
Bencoding se nejčastěji používá v torrent soubory, a jako takový je součástí specifikace BitTorrent. Tyto metadata soubory jsou jednoduše kódované slovníky.
I když je méně efektivní než čisté binární kódování,[Citace je zapotřebí ] Bencoding je jednoduchý a (protože čísla jsou kódována jako text v desítkové soustavě) není ovlivněn endianismus, což je důležité pro a napříč platformami aplikace jako BitTorrent. Je také poměrně flexibilní, pokud aplikace ignorují neočekávané klíče slovníku, takže je možné přidávat nové bez vytváření nekompatibility.
Algoritmus kódování
Bencode používá ASCII znaky jako oddělovače a číslice.
- Celé číslo je kódováno jako i
ASCII > E. Úvodní nuly nejsou povoleny (ačkoli číslo nula je stále reprezentováno jako „0“). Záporné hodnoty jsou kódovány předponou čísla s a pomlčka-minus. Číslo 42 by tak bylo zakódováno jakoi42e
, 0 jakoi0e
a -42 asi-42e
. Záporná nula není povolena. - Bajtový řetězec (posloupnost bajtů, ne nutně znaky) je kódován jako <length>:<contents>. Délka je zakódována v základně 10, jako celá čísla, ale musí být nezáporná (nula je povolena); obsah jsou pouze bajty, které tvoří řetězec. Řetězec „spam“ bude kódován jako
4: spam
. Specifikace se nezabývá kódování znaků mimo sadu ASCII; ke zmírnění tohoto problému některé aplikace BitTorrent výslovně komunikují kódování (nejčastěji UTF-8 ) různými nestandardními způsoby. Je to stejné jako síťové struny práce, kromě toho, že netstrings navíc za sekvenci bajtů přidají příponu čárky. - Seznam hodnot je zakódován jako l<contents>E . Obsah se skládá z Bencoded prvků seznamu, v pořadí, zřetězených. Seznam skládající se z řetězce „spam“ a čísla 42 by byl kódován jako:
l4: spami42ee
. Všimněte si absence oddělovačů mezi prvky a prvním znakem je písmeno „l“, nikoli číslice „1“. - Slovník je kódován jako d<contents>E. Prvky slovníku jsou zakódovány s každým klíčem bezprostředně následovaným jeho hodnotou. Všechny klíče musí být bajtové řetězce a musí se objevit v lexikografický řád. Slovník, který spojuje hodnoty 42 a „spam“ s klávesami „foo“ a „bar“ (jinými slovy
{"bar": "spam", "foo": 42}
), bude kódováno následovně:d3: bar4: spam3: fooi42ee
.
Neexistují žádná omezení ohledně toho, jaké hodnoty mohou být uloženy v seznamech a slovnících; mohou (a obvykle obsahují) další seznamy a slovníky. To umožňuje kódování libovolně složitých datových struktur.
Funkce a nevýhody
Bencode je velmi specializovaný druh binárního kódování s některými jedinečnými vlastnostmi:
- Pro každou možnou (komplexní) hodnotu existuje pouze jedno platné bencoding; tj. existuje bijekce mezi hodnotami a jejich kódováním. To má tu výhodu, že aplikace mohou porovnávat Bencoded hodnoty porovnáním jejich kódovaných forem, což eliminuje potřebu dekódovat hodnoty.
- Mnoho kódových skupin BE lze dekódovat ručně. Protože Bencoded hodnoty často obsahují binární data, dekódování může být docela složité. Bencode není považován za čitelné člověkem formát kódování.
- Bencoding slouží podobným účelům jako datové jazyky JSON a YAML, což umožňuje ukládat složitá, ale volně strukturovaná data do a nezávislý na platformě způsob.
Tato jedinečnost však může způsobit určité problémy:
- Existuje jen velmi málo editorů Bencode[2]
- Protože soubory s kódováním v binárním kódu obsahují binární data a kvůli některým složitostem způsobů, jakým jsou obvykle ukládány binární řetězce, není často bezpečné upravovat soubory v kódování v textových editorech.
Viz také
Reference
- ^ Specifikace protokolu BitTorrent. BitTorrent.org. Vyvolány 8 October je 2018.
- ^ "BEncode Editor". Komunitní fóra μTorrent. Citováno 24. října 2014.
externí odkazy
- Bencoding specifikace
- Soubor_Bittorrent2 - Další implementace PHP Bencode / dekódování
- Původní implementace BitTorrent v Pythonu jako samostatný balíček
- BEnkódový editor vizuální editor pro BEncoded soubory
- Editor torrentových souborů multiplatformní editor grafického uživatelského rozhraní pro soubory BEncode
- bencode-tools - knihovna C pro manipulaci s Bencoded daty a XML schéma jako validátor pro Bencode zprávy v Pythonu
- Bento - Knihovna Bencode v Elixíru.
- Beecoder - analyzátor toku souborů, který de / kóduje datový formát „B-encode“ v Javě pomocí java.io. * stream Api.
- Analýza kódu Bencode v Javě
- Knihovna Bencode ve Scale
- Analýza kódu v C.
- Na CPAN existuje řada implementací Perlu