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 som i0eoch -42 som i-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