在我的Windows 7 Files.newInputStream上返回sun.nio.ch.ChannelInputStream.当我测试其性能与FileInputStream时,我惊讶地发现FileInputStream更快.
这个测试
InputStream in = new FileInputStream("test"); long t0 = System.currentTimeMillis(); byte[] a = new byte[16 * 1024]; for (int n; (n = in.read(a)) != -1;) { } System.out.println(System.currentTimeMillis() - t0);
在125毫秒内读取100mb文件.如果我用第一行替换
InputStream in = Files.newInputStream(Paths.get("test"));
我得到320毫秒.
如果Files.newInputStream比FileInputStream有什么优势呢?
如果您测试了new FileInputStream
第二个,您可能只是看到了操作系统缓存启动的影响.Java对I/O绑定进程造成任何重大差异是不可信的.以相反的方式尝试它,并在更大的数据集上.