JDK 1.4使用NIO重新实现IO,从而使IO更快,这是真的吗?

时间:2018-11-20 13:45:31

标签: java nio

我正在阅读Thinking in Java一书,其中提到了JDK 1.4 java.nio * 关于File的问题,他说File NIO比File IO快,并且旧的IO包已使用NIO重新实现,所以现在IO更快。

这是真的吗? NIO和IO在这里指的是什么?我想它应该与JVM和操作系统的操作有关,因为我没有在JDK源代码的IO包中找到NIO信息。你能解释一下蔚来在这里指的是什么吗?为什么它比IO快?

2 个答案:

答案 0 :(得分:0)

这本书的确切报价似乎是

  

JDK 1.4在java.nio.*中引入了Java“新” I / O库。   包,有一个目标:速度。实际上,“旧” I / O包具有   已使用 nio 重新实现,以利用此功能   速度提高,因此即使您未明确编写也将受益    nio 编码。

Thinking in Java ,第4版,第679页)

这比您的释义更清楚。同样,出现的章节的开头(“ I / O”)明确定义了术语“ I / O”和“ nio”。

  

NIO和IO在这里指的是什么?

“ I / O”是“输入/输出”的通用计算机术语,Eckles在这种意义上使用它。 “ nio”专门指Java标准库的java.nio.*类,这是Java 1.4的新功能。与其他许多系统一样,Eckles将“ n”与“ new”相关联,尽管Oracle(当时的Sun)似乎在脑海中想到了更多技术术语“ non-blocking”。在Eckles谈论“'旧'I / O程序包”的地方,他主要是指java.io.*类(实际上只有一个程序包),他刚刚花了30页讨论。

  

为什么它比IO快?

根据Eckles:

  

速度来自使用与操作系统执行I / O方式更接近的结构:通道缓冲区

如果这对您没有意义,那么您可能需要研究他所指的底层细节。但是,您可以从 nio 类的详细信息中了解它们,Eckles将其专门用于本书的下18页。

  

[java.io.*类从 nio 中受益是真的吗?

这个断言对我来说似乎完全合理。我无法轻松访问Java 1.4源,但是花了大约一分钟时间才从Google到java.io.FileInputStream源,并在the first version I looked at中发现了这一点(来自OpenJDK 7),尽管关键点是对于本机,该类确实是根据 nio java.nio.channels.FileChannel实现的。

答案 1 :(得分:-1)

Java IO指Java输入/输出API。它的设计是...使用输入和输出。

Java NIO是IO(非阻塞IO)的重新实现。它被认为更快。

我不知道是否在任何时候都重新实现了IO(尽管这是您的要求),我只能假设您误读了它,实际上是NIO在重新实现IO。这本书的摘录可以更好地阐明它。

ps:这是对库的重新实现,它以不同的方式实现,但通常做同样的事情