最初我们用Java中的FileOutputStream
创建了一个OutputStream
,它只是将数据传输到一个文件中。Files.newOutputStream vs FileOutputStream
从Java 7开始,我们也可以调用Files.newOutputStream
,它为我们创建了一个行为完全相同的Stream(“构造函数”参数中的细微差别除外)。
至少在OpenJDK的8旧FileOutputStream
“s的写入方法被实现为一个本机方法,同时通过Files.newOutputStream
创建的OutputStream创建一个ByteChannel
,然后通过一个OutputStream包裹该委托给了ByteChannel。
第二种方法对于写入调用所经过的所有包装来说相当复杂。一些天真的性能测试表明,虽然新方法速度稍微快了一点,但这不是很多,也不值得一提。但是,也许我没有选择最好的用例。
OpenJDK中新的基于ByteChannel的实现的原因是什么?速度快吗?有没有这种情况会明显更快?为什么?
(我知道这是JRE依赖的,不应该依赖确切的实现,这主要是关于背景的好奇心)。
我认为一切都在“一些天真的性能测试”。你是如何测试它的?你可以发布你的基准代码吗? – Tunaki
这种性能测试非常依赖操作系统;我怀疑OpenJDK家伙在决定实现这个实现之前,在尽可能多的系统上进行了广泛的性能测试。 – fge
此外,只是为了澄清:这个问题与一个人想要一个'File'和另一个'Path'的事实没有关系,对吧? – fge