バイナリ I/O を使用して一部のファイルを分割して作成された .dat ファイルを接続する際に問題が発生しました。
この問題は、.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();
}
前もって感謝します!