Java android:将一个文件复制到另一个文件的更快解决方案
我正在使用BufferedInputStream复制文件。 我在循环中复制字节[]。 这对于大文件来说相当慢 我看到了FileChannel结构。我也试过用这个。我想知道FileChannel是否比使用IOSTreams更好。在我的测试中,我看不到有重大的性能改进 还是有其他更好的解决方案 我的要求是修改src文件的前1000个字节并复制到目标,将src文件的其余字节复制到目标文件 使用文件通道Java android:将一个文件复制到另一个文件的更快解决方案,java,android,filechannel,Java,Android,Filechannel,我正在使用BufferedInputStream复制文件。 我在循环中复制字节[]。 这对于大文件来说相当慢 我看到了FileChannel结构。我也试过用这个。我想知道FileChannel是否比使用IOSTreams更好。在我的测试中,我看不到有重大的性能改进 还是有其他更好的解决方案 我的要求是修改src文件的前1000个字节并复制到目标,将src文件的其余字节复制到目标文件 使用文件通道 private void copyFile(File sourceFile, File destF
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);
}
我认为性能无法显著提高,因为硬盘/sd卡速度可能是瓶颈 但是,创建执行复制的后台任务可能会有所帮助 这并不是真的更快,但感觉更快,因为您不必等待复制操作的完成 此解决方案仅在应用程序启动后不需要立即显示结果的情况下有效
有关详细信息,请参见
transferFrom()
必须在循环中调用。它不能保证在一次呼叫中转移全部金额。我终于用覆盖和重命名完成了。使用随机文件覆盖第一个x字节。然后重命名该文件。现在,无论文件大小如何,它的速度都要快得多,并且需要相同的时间
谢谢。如果看不到您的代码,就不可能回答这个问题。您说您正在使用缓冲输入流进行读取,但您是否也在使用缓冲输出流进行写入?写是一个比读要昂贵得多的操作,对于大文件,你可能无法像k3b所说的那样做太多