Bencode - Bencode
Bencode (uttales som Ben-code ) er kodingen som brukes av peer-to-peer -fildelingssystemet BitTorrent for lagring og overføring av løst strukturerte data.
Den støtter fire forskjellige typer verdier:
Bencoding brukes mest i torrentfiler , og er som sådan en del av BitTorrent -spesifikasjonen. Disse metadatafilene er ganske enkelt benkodede ordbøker.
Selv om det er mindre effektivt enn en ren binær koding, er bencoding enkel og (fordi tall er kodet som tekst i desimalnotasjon) upåvirket av endianness , noe som er viktig for en plattform-plattform som BitTorrent. Det er også ganske fleksibelt, så lenge applikasjoner ignorerer uventede ordlistenøkler, slik at nye kan legges til uten å skape inkompatibiliteter.
Kodingsalgoritme
Bencode bruker ASCII -tegn som skilletegn og sifre.
- Et heltall er kodet som i <heltall kodet i basis ti ASCII > e . Innledende nuller er ikke tillatt (selv om tallet null fremdeles er representert som "0"). Negative verdier kodes ved å sette et bindestrek-minus foran tallet . Tallet 42 vil dermed bli kodet som
i42e, 0 somi0eog -42 somi-42e. Negativ null er ikke tillatt. - En byte -streng (en sekvens av byte , ikke nødvendigvis tegn) er kodet som <lengde> : <innhold> . Lengden er kodet i basis 10, som heltall, men må være ikke-negativ (null er tillatt); innholdet er bare byte som utgjør strengen. Strengen "spam" vil bli kodet som
4:spam. Spesifikasjonen omhandler ikke koding av tegn utenfor ASCII -settet; For å redusere dette, kommuniserer noen BitTorrent-applikasjoner eksplisitt kodingen (oftest UTF-8 ) på forskjellige ikke-standardiserte måter. Dette er identisk med hvordan nettstrengene fungerer, bortsett fra at nettstrengene i tillegg legger til et komma -suffiks etter bytesekvensen. - En liste over verdier er kodet som l <innhold> e . Innholdet består av de benkodede elementene i listen, i rekkefølge, sammenkoblet. En liste bestående av strengen "spam" og nummeret 42 ville bli kodet som:
l4:spami42ee. Legg merke til fraværet av skilletegn mellom elementene, og det første tegnet er bokstaven 'l', ikke sifferet '1'. - En ordbok er kodet som d <innhold> e . Elementene i ordboken er kodet med hver tast umiddelbart etterfulgt av verdien. Alle nøkler må være byte -strenger og må vises i leksikografisk rekkefølge . En ordbok som tilknyttede verdiene 42 og "spam" med tastene "foo" og "bar", henholdsvis (med andre ord,
{"bar": "spam", "foo": 42}), vil bli kodet som følger:d3:bar4:spam3:fooi42ee.
Det er ingen begrensninger på hva slags verdier som kan lagres i lister og ordbøker; de kan (og gjør det vanligvis) inneholde andre lister og ordbøker. Dette gjør at vilkårlig komplekse datastrukturer kan kodes.
Funksjoner og ulemper
Bencode er en veldig spesialisert type binær koding med noen unike egenskaper:
- For hver mulig (kompleks) verdi er det bare en gyldig bencoding; dvs. det er en sammenheng mellom verdier og deres kodinger. Dette har fordelen at applikasjoner kan sammenligne benkodede verdier ved å sammenligne deres kodede former, og eliminere behovet for å dekode verdiene.
- Mange BE -kodegrupper kan dekodes manuelt. Siden de benkodede verdiene ofte inneholder binære data , kan dekoding bli ganske kompleks. Bencode regnes ikke som et lesbart kodingsformat.
- Bencoding tjener lignende formål som dataspråk som JSON og YAML , slik at komplekse, men løst strukturerte data kan lagres på en plattformuavhengig måte.
Denne særegenheten kan imidlertid forårsake noen problemer:
- Det er svært få bencode -redaktører
- Fordi benkodede filer inneholder binære data, og på grunn av noen av de vanskelighetene som er involvert i måten binære strenger vanligvis lagres på, er det ofte ikke trygt å redigere bencode -filer i tekstredigerere.
Se også
Referanser
Eksterne linker
- Bencoding -spesifikasjon
- File_Bittorrent2 - En annen PHP Bencode/decode -implementering
- Den opprinnelige BitTorrent -implementeringen i Python som frittstående pakke
- BEncode Editor en visuell editor for BEncoded filer
- Torrent File Editor cross-platform GUI editor for BEncode files
- bencode -tools - et C -bibliotek for å manipulere bencoded data og et XML -skjema som validator for bencode -meldinger i Python
- Bento - Bencode bibliotek i Elixir.
- Beecoder - filstrøm -parseren som de/koder "B -kode" dataformat på Java ved hjelp av java.io.* stream Api.
- Bencode -analyse i Java
- Bencode bibliotek i Scala
- Bencode -analyse i C
- Det er mange Perl -implementeringer på CPAN