Bencode - Bencode
Bencode (udtales som Ben-code ) er den kodning, der bruges af peer-to-peer fildelingssystemet BitTorrent til lagring og transmission af løst strukturerede data.
Det understøtter fire forskellige typer værdier:
Bencoding er mest almindeligt anvendt i torrent-filer , og som sådan er en del af BitTorrent-specifikationen. Disse metadatafiler er simpelthen bencodede ordbøger.
Selvom det er mindre effektivt end en ren binær kodning, er bencoding enkel og (fordi tal er kodet som tekst i decimalnotation) upåvirket af endianness , hvilket er vigtigt for en cross-platform applikation som BitTorrent. Det er også ret fleksibelt, så længe programmer ignorerer uventede ordbogsnøgler, så nye kan tilføjes uden at skabe uforeneligheder.
Kodningsalgoritme
Bencode bruger ASCII -tegn som afgrænsere og cifre.
- Et helt tal kodes som i <heltal kodet i basis ti ASCII > e . Førende nuller er ikke tilladt (selvom tallet nul stadig er repræsenteret som "0"). Negative værdier kodes ved at præfiksere tallet med et bindestreg-minus . Tallet 42 ville således blive kodet som
i42e, 0 somi0eog -42 somi-42e. Negativ nul er ikke tilladt. - En byte -streng (en sekvens af bytes , ikke nødvendigvis tegn) er kodet som <længde> : <indhold> . Længden er indkodet i basis 10, ligesom heltal, men skal være ikke-negativ (nul er tilladt); indholdet er kun bytes, der udgør strengen. Strengen "spam" ville blive kodet som
4:spam. Specifikationen omhandler ikke kodning af tegn uden for ASCII -sættet; For at afbøde dette kommunikerer nogle BitTorrent-applikationer eksplicit kodningen (oftest UTF-8 ) på forskellige ikke-standardiserede måder. Dette er identisk med, hvordan netstrings fungerer, bortset fra at netstrings desuden tilføjer et komma -endelse efter bytesekvensen. - En liste med værdier er kodet som l <indhold> e . Indholdet består af de benkodede elementer på listen, i rækkefølge, sammenkædet. En liste, der består af strengen "spam" og tallet 42 ville blive kodet som:
l4:spami42ee. Bemærk fraværet af separatorer mellem elementer, og det første tegn er bogstavet 'l', ikke ciffer '1'. - En ordbog er kodet som d <indhold> e . Elementerne i ordbogen kodes med hver nøgle umiddelbart efterfulgt af dens værdi. Alle nøgler skal være byte -strenge og skal vises i leksikografisk rækkefølge . En ordbog der associerer værdierne 42 og "spam" med tasterne "foo" og "bar", henholdsvis (med andre ord,
{"bar": "spam", "foo": 42}ville), være kodet som følger:d3:bar4:spam3:fooi42ee.
Der er ingen begrænsninger for, hvilken slags værdier der må lagres i lister og ordbøger; de kan (og plejer) at indeholde andre lister og ordbøger. Dette giver mulighed for, at vilkårligt komplekse datastrukturer kodes.
Funktioner og ulemper
Bencode er en meget specialiseret slags binær kodning med nogle unikke egenskaber:
- For hver mulig (kompleks) værdi er der kun en enkelt gyldig bencoding; dvs. der er en sammenhæng mellem værdier og deres kodninger. Dette har den fordel, at applikationer kan sammenligne bencodede værdier ved at sammenligne deres kodede formularer, hvilket eliminerer behovet for at afkode værdierne.
- Mange BE -kodegrupper kan afkodes manuelt. Da de benkodede værdier ofte indeholder binære data , kan afkodning blive ret kompleks. Bencode betragtes ikke som et læseligt kodningsformat.
- Bencoding tjener lignende formål som datasprog som JSON og YAML , hvilket gør det muligt at gemme komplekse, men løst strukturerede data på en platformuafhængig måde.
Denne entydighed kan dog forårsage nogle problemer:
- Der er meget få bencode -redaktører
- Fordi bencede filer indeholder binære data, og på grund af nogle af de forviklinger, der er involveret i den måde, binære strenge typisk gemmes på, er det ofte ikke sikkert at redigere bencode -filer i tekstredigeringsprogrammer.
Se også
Referencer
eksterne links
- Bencoding specifikation
- File_Bittorrent2 - En anden implementering af PHP Bencode/decode
- Den originale BitTorrent -implementering i Python som selvstændig pakke
- BEncode Editor en visuel editor for BEncoded filer
- Torrent File Editor på tværs af platforme GUI-editor til BEncode-filer
- bencode -tools - et C -bibliotek til manipulation af bencodede data og et XML -skema som validator til bencode -beskeder i Python
- Bento - Bencode bibliotek i Elixir.
- Beecoder - filstrømsparseren, der de/koder for "B -kodning" dataformat på Java ved hjælp af java.io.* stream Api.
- Bencode -analyse i Java
- Bencode bibliotek i Scala
- Bencode -analyse i C
- Der er mange Perl -implementeringer på CPAN