我不太了解它们之间的区别,因此我对这两个软件包有一些疑问。
在Google上浏览了一下之后,似乎Oracle决定使用JDK7版本NIO
的更新和增强NIO.2
软件包来更新该软件包。
NIO
封装的性能与封装相比如何NIO.2
?- 从
NIO
到有NIO.2
什么大变化?(例如新方法,功能) - 为什么
NIO
必须对原始软件包进行更新? - 如今是
NIO.2
该NIO
软件包的代名词吗?
这并不是我想在代码中使用旧版包,我对此真的很好奇。请告诉我他们的区别?
我不太了解它们之间的区别,因此我对这两个软件包有一些疑问。
在Google上浏览了一下之后,似乎Oracle决定使用JDK7版本NIO
的更新和增强NIO.2
软件包来更新该软件包。
NIO
封装的性能与封装相比如何NIO.2
?NIO
到有NIO.2
什么大变化?(例如新方法,功能)NIO
必须对原始软件包进行更新?NIO.2
该NIO
软件包的代名词吗?这并不是我想在代码中使用旧版包,我对此真的很好奇。请告诉我他们的区别?
Answers:
Java最初是通过File
在java.io
程序包中提供类来访问文件系统而开始的。该对象表示文件/目录,并且确实允许您执行一些操作,例如检查文件/目录是否存在,获取属性并删除它。但是,它有一些缺点。仅举几例:
boolean
。可以想象,如果发生错误,将false
返回而不是引发异常。开发人员确实没有办法知道失败的原因。为了克服这些问题,在Java 4中引入了java.nio包。主要功能是:
在Java 7中,引入了java.nio.file软件包,它为处理符号链接,文件属性访问提供了更好的支持,并特别支持通过诸如Path,Paths和Files之类的扩展文件系统。您可能想看一下java.nio.file包描述,以获取有关此内容的更多详细信息。
考虑到这一点:
从NIO到NIO.2有哪些重大变化?(例如新方法,功能)?
它们有不同的用途。要指出重大更改,您可能需要查看全新的软件包java.nio.file
。
为什么必须更新原始的NIO程序包?
没有。引入了新软件包,而不是对其进行了更新。
如今,NIO.2只是NIO包的同义词吗?NIO软件包的性能与NIO.2软件包相比如何?
不,它们不是同义词。比较它们之间的性能也没有太大意义,因为它们有不同的用途。NIO是一种更抽象的底层数据I / O,而NIO2则专注于文件管理。
希望这可以帮助。
[书目:Oracle认证专业Java SE7-全面的OCJP7认证指南,由SGGanesh和Tushar Sharma撰写-第9章]
NIO.2引入异步I / O。
异步I / O是NIO不支持的非阻塞I / O方法。
NIO:选择器/反应堆模式
NIO.2:完成处理程序/前摄器模式
因此,在Windows上,NIO.2使用I / O完成端口,可以提高性能。除非没人知道,因为没有人在服务器端使用Windows,如果这样做,他们可能这样做是因为他们对.net进行了大量投资,因此,很可能不会考虑使用Java。
我的看法:
精简版
它是对java.nio.file软件包的补充,它具有高级的大大增强的文件和文件系统功能。
从网络套接字或低级文件访问的角度来看,NIO == NIO.2,具有一些便利性改进。
较长的版本
软件包:java.io
旧的阻塞I / O API
在Java 1.4中添加了新的非阻塞API。
软件包:java.nio
Java非阻塞IO。类,如Selector
,SelectorKey
,Channel
。
这在我看来,NIO是迈出了一大步网络I / O( ,Selector
,SelectorKey
,SocketChannel
,ServerSocketChannel
),Buffer
文件少得多的I / O(FileChannel
和Buffer
只,其中包括内存映射文件)。对于网络和文件部分,这是一个相当低级的API。
在Java 7中添加。它主要是关于添加大大改进的文件和文件系统操作以及寻址API的信息。与文件和文件系统相关的新API相对较高。
打包:java.nio.file
和父项很少添加java.nio
。
此添加项是针对文件I / O的,仅对网络I / O或低级文件API进行了一些次要的添加。
最显着的低层次的,不相关的必要文件,API添加的AsynchronousSocketChannel
,AsynchronousServerSocketChannel
并且AsynchronousFileChannel
,它增加了回调变种一些方法。的异步版本主要是为了方便起见;这样的映射接口甚至可能以前就被黑客入侵过,但是现在它们可以在JRE中直接使用。
新的文件API带来了很多好处-使用Path可以处理更多有用的文件系统,使用自定义文件系统提供程序可以改善ZIP文件的操作,特殊的文件属性访问,还有许多便捷的方法,例如使用一个命令读取整个文件,使用一个命令,等等。但这都与文件/文件系统相关,并且都相当高级。
从网络套接字或低级别文件访问的角度重申我在上面已经说过的内容,NIO == NIO.2
相关连结