正如我所发现的,copyToFile()
的基础操作系统调用是Libcore.os.read(fd, bytes, byteOffset, byteCount)
,而transferTo()
基于内存映射文件:
MemoryBlock.mmap(fd, alignment, size + offset, mapMode);
...
buffer = map(MapMode.READ_ONLY, position, count);
return target.write(buffer);
Q1:我的发现是对还是错?
Q2:有没有理由使用FileUtils.copyFile()
因为FileChannel.transferTo()
似乎应该更有效率?
由于
答案 0 :(得分:4)
我对此有所了解并得出了这个结论:
在java中复制文件的4种方法
使用java.nio.file.Files.copy()
这种方法非常快速且易于编写。
使用java.nio.channels.FileChannel.transferTo()
如果您喜欢他们出色表现的频道课程,请使用此方法。
private static void fileCopyUsingNIOChannelClass() throws IOException
{
File fileToCopy = new File("c:/temp/testoriginal.txt");
FileInputStream inputStream = new FileInputStream(fileToCopy);
FileChannel inChannel = inputStream.getChannel();
File newFile = new File("c:/temp/testcopied.txt");
FileOutputStream outputStream = new FileOutputStream(newFile);
FileChannel outChannel = outputStream.getChannel();
inChannel.transferTo(0, fileToCopy.length(), outChannel);
inputStream.close();
outputStream.close();
}