Skip to content

dampcake/bencode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bencode

Build Status Coverage Status Maven GitHub license

Bencode Input/Output Streams for Java

Requires JDK 1.8 or higher

Bencode Spec

Bencode Wikipedia

Javadoc

http://dampcake.github.io/bencode

Usage

Maven

<dependency> <groupId>com.dampcake</groupId> <artifactId>bencode</artifactId> <version>1.4.2</version> </dependency>

Gradle

compile 'com.dampcake:bencode:1.4.2'

Examples

Bencode Data

Bencode bencode = new Bencode(); byte[] encoded = bencode.encode(new HashMap<Object, Object>() {{ put("string", "value"); put("number", 123456); put("list", new ArrayList<Object>() {{ add("list-item-1"); add("list-item-2"); }}); put("dict", new ConcurrentSkipListMap() {{ put(123, "test"); put(456, "thing"); }}); }}); System.out.println(new String(encoded, bencode.getCharset()));

Outputs: d4:dictd3:1234:test3:4565:thinge4:listl11:list-item-111:list-item-2e6:numberi123456e6:string5:valuee

Decode Bencoded Data:

Bencode bencode = new Bencode(); Map<String, Object> dict = bencode.decode("d4:dictd3:1234:test3:4565:thinge4:listl11:list-item-111:list-item-2e6:numberi123456e6:string5:valuee".getBytes(), Type.DICTIONARY); System.out.println(dict);

Outputs: {dict={123=test, 456=thing}, list=[list-item-1, list-item-2], number=123456, string=value}

Write bencoded data to a Stream:

ByteArrayOutputStream out = new ByteArrayOutputStream(); BencodeOutputStream bencoder = new BencodeOutputStream(out); bencoder.writeDictionary(new HashMap<Object, Object>() {{ put("string", "value"); put("number", 123456); put("list", new ArrayList<Object>() {{ add("list-item-1"); add("list-item-2"); }}); put("dict", new ConcurrentSkipListMap() {{ put("dict-item-1", "test"); put("dict-item-2", "thing"); }}); }}); System.out.println(new String(out.toByteArray()));

Outputs: d4:dictd11:dict-item-14:test11:dict-item-25:thinge4:listl11:list-item-111:list-item-2e6:numberi123456e6:string5:valuee

Read bencoded data to a Stream:

String input = "d4:dictd11:dict-item-14:test11:dict-item-25:thinge4:listl11:list-item-111:list-item-2e6:numberi123456e6:string5:valuee"; ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); BencodeInputStream bencode = new BencodeInputStream(in); Type type = bencode.nextType(); // Returns Type.DICTIONARY Map<String, Object> dict = bencode.readDictionary(); System.out.println(dict);

Outputs: {dict={dict-item-1=test, dict-item-2=thing}, list=[list-item-1, list-item-2], number=123456, string=value}

About

Bencode Input/Output Streams for Java

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8

Languages