Skip to content

Repository files navigation

Bencode

npmnpm downloadsbuild status

A node library for encoding and decoding bencoded data, according to the BitTorrent specification.

Index

About BEncoding

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

Performance

encode buffer

packageversionop/sec
bencode1.0.041,880
dht.js0.2.1636,824
dht-bencode0.1.225,232
bencoding0.0.119,129
bncode0.5.316,567

decode to buffer

packageversionop/sec
bencode1.0.067,351
dht-bencode0.1.264,445
bencoding0.0.148,415
dht.js0.2.1641,648
bncode0.5.33,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

Usage

varbencode=require('bencode')

You can also use node-bencode with browserify to be able to use it in a lot of modern browsers.

Encoding

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).

Output

d4:dictd3:key36:This is a string within a dictionarye7:integeri12345e4:listli1ei2ei3ei4e6:stringi5edee6:string11:Hello Worlde

Decoding

vardata=newBuffer('d6:string11:Hello World7:integeri12345e4:dictd3:key36:This is a string within a dictionarye4:listli1ei2ei3ei4e6:stringi5edeee')varresult=bencode.decode(data)

Output

{string: <Buffer48656c6c6f20576f726c64>,
integer: 12345,
dict: {key: <Buffer54686973206973206120737472696e672077697468696e20612064696374696f6e617279>},
list: [ 1, 2, 3, 4, <Buffer737472696e67>, 5, {} ]
}

Automagically convert bytestrings to strings:

varresult=bencode.decode(data,'utf8')

Output

{string: 'Hello World',integer: 12345,dict: {key: 'This is a string within a dictionary'},list: [1,2,3,4,'string',5,{}]}

API

The API is compatible with the abstract-encoding specification.

bencode.encode( data, [buffer], [offset] )

Buffer | Array | String | Object | Number | BooleandataBufferbufferNumberoffset

Returns Buffer

bencode.decode( data, [start], [end], [encoding] )

BufferdataNumberstartNumberendStringencoding

If encoding is set, bytestrings are automatically converted to strings.

Returns Object | Array | Buffer | String | Number

bencode.byteLength( value ) or bencode.encodingLength( value )

Buffer | Array | String | Object | Number | Booleanvalue

About

bencode de/encoder for nodejs

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages