有人可以解释一下该transferTo
方法如何以看似 1000+ MB/秒的速度复制文件。我使用 372MB 的二进制文件运行了一些测试,第一个副本很慢,但是如果我更改输出名称并再次运行它,输出目录中会出现一个额外的文件,只需 180 毫秒,即超过 2000 MB/秒。这里发生了什么?我正在运行 Windows 7。
private static void doCopyNIO(String inFile, String outFile) {
FileInputStream fis = null;
FileOutputStream fos = null;
FileChannel cis = null;
FileChannel cos = null;
long len = 0, pos = 0;
try {
fis = new FileInputStream(inFile);
cis = fis.getChannel();
fos = new FileOutputStream(outFile);
cos = fos.getChannel();
len = cis.size();
while (pos < len) {
pos += cis.transferTo(pos, (1024 * 1024 * 10), cos); // 10M
}
fos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cos != null) { try { cos.close(); } catch (Exception e) { } }
if (fos != null) { try { fos.close(); } catch (Exception e) { } }
if (cis != null) { try { cis.close(); } catch (Exception e) { } }
if (fis != null) { try { fis.close(); } catch (Exception e) { } }
}
}