您可以先将数据块的长度作为固定大小的值写入文件,例如一个4字节的整数,后跟数据本身:
public void appendChunk(byte[] data, File file) throws IOException {
DataOutputStream stream = null;
try {
stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file, true)));
stream.writeInt(data.length);
stream.write(data);
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// ignore
}
}
}
}
如果以后您必须从该文件读回这些块,则可以从读取第一个块的长度开始.现在,您可以决定是读取块数据,还是跳过它并继续下一个块.
public void processChunks(File file) throws IOException {
DataInputStream stream = null;
try {
stream = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
while (true) {
try {
int length = stream.readInt();
byte[] data = new byte[length];
stream.readFully(data);
// todo: do something with the data
} catch (EOFException e) {
// end of file reached
break;
}
}
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// ignore
}
}
}
}
您还可以添加有关块的其他元数据,例如使用stream.writeUTF(…)写入文件的原始名称.您只需要确保以相同的顺序写入和读取相同的数据即可.