资源简介
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) {
相关资源
- 人事管理系统java+sql
- Java日程管理——万年行事历源代码
- Java固定资产管理系统课程设计源码整
- java程序做成windows服务
- JAVA课程设计--员工信息管理系统
- BACnet java代码完整版
- java-client-4.1.2.jar
- java代码保护,防止反编译
- JavaEE 文件上传代码
- org.greggordon.tools.jar
- Java语言-透明网桥模拟课程设计报告
- java中遍历某个目录下的所有文件及文
- 基于Java实现的图像识别
- JAVA火车售票系统
- JAVA数据预处理中的等宽和等频分箱操
- JAVA 全套视频 200G
- java+记事本+源代码+设计报告
- java实现监视任务的进度条
- fpgrowth算法的java代码
- Java设计模式学期论文
- java pcm数据文件
- javaSpringcloudB2B2Co2o电子商务.zip
- java web程序实现增删改查
- Android下的推箱子游戏
- Java开发的数独游戏
- robocode高手
- java项目吃货联盟订餐系统
- TN--秘密共享算法 Java实现
- jdk1.6、1.7、1.8的local_policy.jar和US_exp
- javaweb中怎样实现登录功能-项目资源包
评论
共有 条评论