我正在阅读Thinking in Java一书,其中提到了JDK 1.4 java.nio * 关于File的问题,他说File NIO比File IO快,并且旧的IO包已使用NIO重新实现,所以现在IO更快。
这是真的吗? NIO和IO在这里指的是什么?我想它应该与JVM和操作系统的操作有关,因为我没有在JDK源代码的IO包中找到NIO信息。你能解释一下蔚来在这里指的是什么吗?为什么它比IO快?
答案 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:这是对库的重新实现,它以不同的方式实现,但通常做同样的事情