Bencode - Bencode
Bencode (uttalas som Ben-code ) är kodningen som används av peer-to-peer -fildelningssystemet BitTorrent för att lagra och överföra löst strukturerad data.
Den stöder fyra olika typer av värden:
Bencoding används oftast i torrentfiler och är som sådan en del av BitTorrent -specifikationen. Dessa metadatafiler är helt enkelt benkodade ordböcker.
Även om det är mindre effektivt än en ren binär kodning, är bencoding enkel och (eftersom siffror är kodade som text i decimalnotering) påverkas inte av endianness , vilket är viktigt för en plattformsoberoende applikation som BitTorrent. Det är också ganska flexibelt, så länge applikationer ignorerar oväntade ordlistanycklar, så att nya kan läggas till utan att skapa oförenligheter.
Kodningsalgoritm
Bencode använder ASCII -tecken som avgränsare och siffror.
- Ett heltal kodas som i <heltal kodat i bas tio ASCII > e . Ledande nollor är inte tillåtna (även om siffran noll fortfarande representeras som "0"). Negativa värden kodas genom att prefixa talet med ett bindestreck-minus . Talet 42 skulle således kodas som
i42e, 0 somi0eoch -42 somi-42e. Negativ noll är inte tillåten. - En byte -sträng (en sekvens av byte , inte nödvändigtvis tecken) kodas som <längd> : <innehåll> . Längden är kodad i bas 10, som heltal, men måste vara icke-negativ (noll är tillåten); innehållet är bara byte som utgör strängen. Strängen "skräppost" skulle kodas som
4:spam. Specifikationen behandlar inte kodning av tecken utanför ASCII -uppsättningen; för att mildra detta kommunicerar vissa BitTorrent-applikationer uttryckligen kodningen (oftast UTF-8 ) på olika icke-standardiserade sätt. Detta är identiskt med hur nätsträngar fungerar, förutom att nätsträngar dessutom lägger till ett kommasuffix efter bytesekvensen. - En lista med värden kodas som l <innehåll> e . Innehållet består av de benkodade elementen i listan, i ordning, sammanfogade. En lista bestående av strängen "spam" och antalet 42 skulle kodas som:
l4:spami42ee. Observera frånvaron av separatorer mellan element, och det första tecknet är bokstaven 'l', inte siffran '1'. - En ordbok är kodad som d <innehåll> e . Elementen i ordlistan kodas med varje nyckel omedelbart följt av dess värde. Alla nycklar måste vara byte -strängar och måste visas i lexikografisk ordning . En ordbok som associerar de värden 42 och "spam" med tangenterna "foo" och "bar", respektive (med andra ord,
{"bar": "spam", "foo": 42}), skulle vara kodade enligt följande:d3:bar4:spam3:fooi42ee.
Det finns inga begränsningar för vilken typ av värden som får lagras i listor och ordböcker; de kan (och brukar göra) innehålla andra listor och ordböcker. Detta gör att godtyckligt komplexa datastrukturer kan kodas.
Funktioner och nackdelar
Bencode är en mycket specialiserad typ av binär kodning med några unika egenskaper:
- För varje möjligt (komplext) värde finns det bara en enda giltig benkodning; dvs det finns en koppling mellan värden och deras kodningar. Detta har fördelen att applikationer kan jämföra benkodade värden genom att jämföra sina kodade former, vilket eliminerar behovet av att avkoda värdena.
- Många BE -kodgrupper kan avkodas manuellt. Eftersom de benkodade värdena ofta innehåller binära data kan avkodning bli ganska komplex. Bencode anses inte vara ett läsbart kodningsformat.
- Bencoding tjänar liknande syften som dataspråk som JSON och YAML , vilket gör att komplexa men löst strukturerade data kan lagras på ett plattformsoberoende sätt.
Denna unikhet kan dock orsaka vissa problem:
- Det finns väldigt få benskodredigerare
- Eftersom benkodade filer innehåller binära data och på grund av några av de krångligheter som är involverade i hur binära strängar vanligtvis lagras, är det ofta inte säkert att redigera benskodfiler i textredigerare.
Se även
Referenser
externa länkar
- Bencoding specifikation
- File_Bittorrent2 - En annan PHP Bencode/decode -implementering
- Den ursprungliga BitTorrent -implementeringen i Python som fristående paket
- BEncode Editor en visuell editor för BEncoded -filer
- Torrent File Editor plattforms-GUI-editor för BEncode-filer
- bencode -tools - ett C -bibliotek för att manipulera bencoded data och ett XML -schema som validator för bencode -meddelanden i Python
- Bento - Bencode bibliotek i Elixir.
- Beecoder - filströmsparsaren som av/kodar "B -kodar" dataformat på Java med java.io.* stream Api.
- Bencode -analys i Java
- Bencode -bibliotek i Scala
- Bencode -analys i C
- Det finns många Perl -implementeringar på CPAN