Joh*_*ynh 72 java io nio difference
我不太明白它们彼此有多么不同,所以我对这两个包有一些疑问.
在谷歌上看了一下之后,似乎Oracle决定使用更新的NIO
增强NIO.2
软件包更新软件包,作为JDK7版本的一部分.
NIO
包的性能与包相比如何NIO.2
?NIO
来NIO.2
?(例如新方法,功能)NIO
包必须更新?NIO.2
只是NIO
包的代名词吗?这不是我想在我的代码中使用遗留包,我只是对此非常好奇.请告诉我他们的不同之处?
小智 79
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 - 由SGGanesh和Tushar Sharma撰写的全面的OCJP7认证指南 - 第9章]
Eug*_*sky 46
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 是比较高级的。
Package:java.nio.file
以及对 parent 的一些补充java.nio
。
这些添加用于文件 I/O,并且仅对网络 I/O 或低级文件 API 进行了少量添加。
最显着的低级、与文件无关的 API 新增功能是AsynchronousSocketChannel
,AsynchronousServerSocketChannel
和AsynchronousFileChannel
,它们为某些方法添加了回调变体。的异步版本主要是一个方便的补充;这样的映射接口甚至在以前就可以被破解,但现在它们在 JRE 中开箱即用。
新的文件 API 带来了很多好处 - 使用 Path 更有用的文件系统寻址,使用自定义文件系统提供程序大大改进了 ZIP 文件操作,特殊文件属性访问,许多方便的方法,例如使用一个命令读取整个文件,使用一个命令等。但它与所有文件/文件系统相关,并且都非常高。
重申我上面已经说过的,从网络套接字或低级文件访问的角度来看,NIO == NIO.2
相关链接
归档时间: |
|
查看次数: |
27784 次 |
最近记录: |