我遇到了连接回 .dat 文件的问题,这些文件是通过使用二进制 I/O 拆分某些文件而产生的。
某些类型的文件会出现问题,例如 .avi 文件(不超过 2GB)。连接回来后,输出文件似乎与拆分的文件完全相同,但对于 .avi 文件,会出现“无法渲染文件”错误。(如果您使用二进制 I/O 制作文件的副本,也会发生同样的事情)。但是,例如,.mp4 文件已正确连接回来。
我的问题是为什么会这样?因为正如我所学的那样——任何文件都只是 0 和 1 的序列。所以如果你只是重写文件的二进制序列并设置相同的文件格式——一切都应该正常。
以防万一,这是我用于拆分和连接文件的代码(它工作正常):
--- 分离器 ---
public static void main(String[] args) throws IOException {
String sourceFile = "Movie2.mp4";
int parts = 5;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(sourceFile));
BufferedOutputStream out;
int partSize = in.available() / parts;
byte[] b;
for (int i = 0; i < parts; i++) {
if (i == parts - 1) {
b = new byte[in.available()];
in.read(b);
out = new BufferedOutputStream(new FileOutputStream(sourceFile + "_" + i + ".dat"));
out.write(b);
out.close();
} else {
b = new byte[partSize];
in.read(b);
out = new BufferedOutputStream(new FileOutputStream(sourceFile + "_" + i + ".dat"));
out.write(b);
out.close();
}
}
in.close();
}
- - 连接器 - -
public static void main(String[] args) throws IOException {
String sourceFile;
BufferedInputStream in;
byte[] b;
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("Movie2RESTORED.mp4", true));
for (int i = 0; i < 5; i++) {
sourceFile = "Movie2.mp4_" + i + ".dat";
in = new BufferedInputStream(new FileInputStream(sourceFile));
b = new byte[in.available()];
in.read(b);
out.write(b);
in.close();
}
out.close();
}
提前致谢!