BufferedInputStream を使用してファイルをコピーしています。ループで byte[] をコピーします。これは、大きなファイルでは非常に遅くなります。
FileChannel 構造を見ました。これも使ってみました。FileChannel が IOSTreams を使用するよりも優れているかどうかを知りたいです。テスト中、大幅なパフォーマンスの向上は見られませんでした。
または、他のより良い解決策があります。
私の要件は、srcファイルの最初の1000バイトを変更してターゲットにコピーし、srcファイルの残りのバイトをターゲットファイルにコピーすることです。
ファイルチャンネルあり
private void copyFile(File sourceFile, File destFile,byte[] buffer,int srcOffset, int destOffset) {
try {
if (!sourceFile.exists()) {
return;
}
if (!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
source = new FileInputStream(sourceFile).getChannel();
source.position(srcOffset);
destination = new FileOutputStream(destFile).getChannel();
destination.write(ByteBuffer.wrap(buffer));
if (destination != null && source != null) {
destination.transferFrom(source, destOffset, source.size()-srcOffset);
}
if (source != null) {
source.close();
}
if (destination != null) {
destination.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
I/O ストリームの使用
while ((count = random.read(bufferData)) != -1) {
fos.write(bufferData, 0, count);
}