torrent文件的基本结构和语法这个不废话介绍了,一下为代码 ,复制即用,速度很快
package cn.p2p;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.Yeah.FByteList;
import org.Yeah.FParse;
/*
* 集合:l...e
* 字符串:length:...
* 数字:i...e
*/
public class TorrentFileParser extends FParse{
private String pieceEncoding="ISO8859-1";
private String announce;
private List<String> trackers=new ArrayList<String>();
private Date createdDate;
private String comment;
private String author;
private List<TorrentFile> tfs=new ArrayList<TorrentFile>();
private String encoding;//这个encoding似乎没啥意义,不是pieces的加密编码
private FByteList bl=new FByteList();
private String website;
private String fileName;
private int pieceLength;
private int AllPieceLength;
private List<String> pieces=new ArrayList<String>();
private String info;
private String fileSize;
public int fileLength() {
int l=0;
for(TorrentFile f:tfs) {
l+=f.getLength();
}
int y=0;
double j;
if((y=l/1024)>=1 && (y=l/1024)<1024) {
fileSize=(j=l/1024)+"KB";
}else if((y=l/1024)>=1024 && (y=l/1024)<1024*1024) {
fileSize=(j=l/1024)+"MB";
}else {
fileSize=(j=l/1024)+"GB";
}
return l;
}
public String toInfoHash() {
StringBuffer sb=null;
if(tfs.size()!=0) {
sb=new StringBuffer("d5:files");
sb.append("l");
for(int i=0;i<tfs.size();i++) {
sb.append("d6:lengthi"+tfs.get(i).getLength()+"e4:pathl"+tfs.get(i).getPath().length()+":"+tfs.get(i).getPath()+"ee");
}
sb.append("e")
.append("4:name"+fileName.length()+":"+fileName+"12:piece lengthi"+pieceLength+"e")
.append("6:pieces"+AllPieceLength+":");
for(int j=0;j<pieces.size();j++) {
sb.append(pieces.get(j));
}
sb.append("e");
info=sb.toString();
}
return Stupid.getSha1(info, pieceEncoding);
}
private void readTorrentFile(String path) {
try {
FileInputStream fs=new FileInputStream(path);
bl.read(fs, -1);
//System.out.println(bl.detach().length);
source=new StringBuffer(new String(bl.detach(),pieceEncoding));//读取完成,这里编码很重要 否则有些数据无法转换为相应的字符
}catch(FileNotFoundException e) {
System.out.println("找不到指定文件 "+path);
e.printStackTrace();
}catch(IOException e) {
System.out.println("读取文件失败 "+path);
e.printStackTrace();
}
}
//@SuppressWarnings("unused")
private void parse(String maker) {
String value="";
String len=""