• 大小: 9KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Java
  • 标签: Java  bt  torrent  

资源简介

Java解析bt torrent种子文件的工具类代码分享,只能用炫酷来形容,感兴趣就下载看看吧

资源截图

代码片段和文件信息

package download.bt;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 解析bt种子
 */
@SuppressWarnings(value = { “rawtypes“ “unchecked“ “unused“ })
public class BDecoder {
public static Charset BYTE_CHARSET = Charset.forName(“UTF-8“);;
public static Charset DEFAULT_CHARSET = Charset.forName(“UTF-8“);;
private boolean recovery_mode;
public static Map decode(byte[] data) throws IOException {
return (new BDecoder().decodeByteArray(data));
}
public static Map decode(BufferedInputStream is) throws IOException {
return (new BDecoder().decodeStream(is));
}
public BDecoder() {
}
public Map decodeByteArray(byte[] data) throws IOException {
return (decode(new ByteArrayInputStream(data)));
}
public Map decodeStream(BufferedInputStream data) throws IOException {
object res = decodeInputStream(data 0);
if (res == null) {
throw (new IOException(“BDecoder: zero length file“));
} else if (!(res instanceof Map)) {
throw (new IOException(“BDecoder: top level isn‘t a Map“));
}
return ((Map) res);
}
private Map decode(ByteArrayInputStream data) throws IOException {
object res = decodeInputStream(data 0);

if (res == null) {
throw (new IOException(“BDecoder: zero length file“));
} else if (!(res instanceof Map)) {
throw (new IOException(“BDecoder: top level isn‘t a Map“));
}

return ((Map) res);
}

private object decodeInputStream(InputStream bais int nesting)

throws IOException {
if (nesting == 0 && !bais.markSupported()) {
throw new IOException(“InputStream must support the mark() method“);
}
// set a mark
bais.mark(Integer.MAX_VALUE);
// read a byte
int tempByte = bais.read();
// decide what to do
switch (tempByte) {
case ‘d‘:
// create a new dictionary object
Map tempMap = new HashMap();
try {
// get the key
byte[] tempByteArray = null;
while ((tempByteArray = (byte[]) decodeInputStream(bais nesting + 1)) != null) {
// decode some more
object value = decodeInputStream(bais nesting + 1);
// add the value to the map
CharBuffer cb = BYTE_CHARSET.decode(ByteBuffer.wrap(tempByteArray));
String key = new String(cb.array() 0 cb.limit());
tempMap.put(key value);
}
bais.mark(Integer.MAX_VALUE);
tempByte = bais.read();
bais.reset();
if (nesting > 0 && tempByte == -1) {
throw (new IOException(“BDecoder: invalid input data ‘e‘ missing from end of dictionary“));
}
} catch (Throwable e) {
if (!recovery_mode) {

评论

共有 条评论