计算机科学

首页 > 计算机科学

Bencode

2018-09-06 14:13:50     所属分类:置标语言

Bencode(发音为Bee-Encode)是BitTorrent用在传输数据结构的编码方式。这种编码方式支持四种数据类型:

  • 字符串
  • 整数
  • 串列
  • 字典表

Bencode最常被用在.torrent档中,文件里的元数据都是Bencode过的字典表。其也被用在tracker返回响应时使用。

虽然比用纯二进制编码效率低,但由于结构简单而且不受字节存储顺序影响(所有数字以十进制编码)——这对于跨平台性非常重要。而且具有较好的灵活性,即使存在故障的字典键,只要将其忽略并更换新的就能兼容补充。

编码方法

Bencode使用ASCII字符作为分隔符和数字。

  • 一个整型数会以十进制数编码并括在i和e之间,不允许前导零(但0依然为整数0),负数在编码后直接加前导负号,不允许负零。如整型数“42”编码为“i42e”,数字“0”编码为“i0e”,“-42”编码为“i-42e”。
  • 一个字节的字符串(只是一个字节的字符串,不一定是一个方块字)会以(长度):(内容)编码,长度的值和数字编码方法一样,只是不允许负数;内容就是字符串的内容,如字符串“spam”就会编码为“4:spam”,本规则不能处理ASCII以外的字符串,为了解决这个问题,一些BitTorrent程序会以非标准的方式将ASCII以外的字符以UTF-8转化后再编码。
  • 线性表会以l和e括住来编码,其中的内容为Bencode四种编码格式所组成的编码字符串,如包含和字符串“spam”数字“42”的线性表会被编码为“l4:spami42ee”,注意分隔符要对应配对。
  • 字典表会以d和e括住来编码,字典元素的键和值必须紧跟在一起,而且所有键为字符串类型并按字典顺序排好。如键为“bar”值为字符串“spam”和键为“foo”值为整数“42”的字典表会被编码为“d3:bar4:spam3:fooi42ee”。

对于线性表和字典的取值范围并没有限制,他们通常会包含其他元素,这样就允许对很复杂的数据结构进行编码。

外部链接

  • Another BitTorrent protocol specification
  • File_Bittorrent2 - Another PHP Bencode/decode implementation
  • The original BitTorrent implementation in Python as standalone package
  • BEncode Editor
  • bencode-tools - a C library for manipulating bencoded data and a XML schema like validator for bencode messages in Python
  • Bencode parsing in Java
  • Bencode parsing in C
版权声明:本文由北城百科网创作,转载请联系管理获取授权,未经容许转载必究。https://www.beichengjiu.com/computerscience/340699.html

显示全文

取消

感谢您的支持,我会继续努力的!

扫码支持
支付宝扫一扫赏金或者微信支付5毛钱,阅读全文

打开微信扫一扫,即可进行阅读全文哦


上一篇:BBCode
下一篇:XSLT
相关推荐
爱淘宝