我正在使用 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);
}