关于socket 文件的分块问题!!!!!!
菜鸟一枚-------------------------------------------------
包头和包体的形式,多个线程读取分块传输到接收端。
这是每个块的封装
public class FileData {
private String fileName;
private long fileLen;
private byte[] data;
public FileData(String fileName, long fileLen, byte[] data) {
super();
this.fileName = fileName;
this.fileLen = fileLen;
this.data = data;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
这是具体的分块方法
public class FileSplit {
private DataInputStream currentDis;
private List<String> filePathList;
private String currentFileName;
private long currentFileLen;
public FileSplit(List<String> filePathList) {
this.filePathList = filePathList;
for (int i = 0; i < filePathList.size(); i++) {
try {
File file = new File(filePathList.get(0));
currentDis = new DataInputStream(new FileInputStream(file));
currentFileName = file.getName();
currentFileLen = file.length();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public FileData get(int len) {
byte[] b = new byte[len];
try {
int l = currentDis.read(b);
//if read finish change dis
if (l == -1) {
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new FileData(currentFileName, currentFileLen, b);
}
}
目前的想法是,我再多封装一个startPos,记录字节读取开始位置,这样接收端解析的时候就知道接收到的块该从哪里开始写入了。现在的疑问是,一个线程执行一次这个方法,我的startPos怎么变化呢,怎么自加呢!