A node library for encoding and decoding bencoded data, according to the BitTorrent specification.
from Wikipedia:
Bencode (pronounced like B encode) is the encoding used by the peer-to-peer file sharing system BitTorrent for storing and transmitting loosely structured data.
It supports four different types of values:
- byte strings
- integers
- lists
- dictionaries
Bencoding is most commonly used in torrent files. These metadata files are simply bencoded dictionaries.
Install with npm
npm install bencode
| package | version | op/sec |
|---|---|---|
| bencode | 1.0.0 | 41,880 |
| dht.js | 0.2.16 | 36,824 |
| dht-bencode | 0.1.2 | 25,232 |
| bencoding | 0.0.1 | 19,129 |
| bncode | 0.5.3 | 16,567 |
| package | version | op/sec |
|---|---|---|
| bencode | 1.0.0 | 67,351 |
| dht-bencode | 0.1.2 | 64,445 |
| bencoding | 0.0.1 | 48,415 |
| dht.js | 0.2.16 | 41,648 |
| bncode | 0.5.3 | 3,188 |
Benchmarks run on an Intel Core i7-5500U @ 2.40Ghz with node v6.1.0 & GNU/Linux 4.4.0
To run the benchmarks simply use
npm run bench
varbencode=require('bencode')You can also use node-bencode with browserify to be able to use it in a lot of modern browsers.
vardata={string: 'Hello World',integer: 12345,dict: {key: 'This is a string within a dictionary'},list: [1,2,3,4,'string',5,{}]}varresult=bencode.encode(data)NOTE As of bencode@0.8.0, boolean values will be cast to integers (false -> 0, true -> 1).
d4:dictd3:key36:This is a string within a dictionarye7:integeri12345e4:listli1ei2ei3ei4e6:stringi5edee6:string11:Hello Worlde
vardata=newBuffer('d6:string11:Hello World7:integeri12345e4:dictd3:key36:This is a string within a dictionarye4:listli1ei2ei3ei4e6:stringi5edeee')varresult=bencode.decode(data){string: <Buffer48656c6c6f20576f726c64>,
integer: 12345,
dict: {key: <Buffer54686973206973206120737472696e672077697468696e20612064696374696f6e617279>},
list: [ 1, 2, 3, 4, <Buffer737472696e67>, 5, {} ]
}Automagically convert bytestrings to strings:
varresult=bencode.decode(data,'utf8'){string: 'Hello World',integer: 12345,dict: {key: 'This is a string within a dictionary'},list: [1,2,3,4,'string',5,{}]}The API is compatible with the abstract-encoding specification.
Buffer|Array|String|Object|Number|BooleandataBufferbufferNumberoffset
Returns Buffer
BufferdataNumberstartNumberendStringencoding
If encoding is set, bytestrings are
automatically converted to strings.
Returns Object | Array | Buffer | String | Number
Buffer|Array|String|Object|Number|Booleanvalue