Skip to content

Latest commit

 

History

118 提交

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

仓库 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 维基pedia

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}

关于

Bencode Input/Output Streams for Java

Topics

Resources

Stars

68 stars

关注者

4 watching

复刻s

发布

Used by

贡献者

Languages