我不太明白他们之间有多大的不同,所以我对这两个包裹有一些疑问。
在浏览了一下谷歌之后,似乎甲骨文决定用更新和增强的NIO包来更新NIO.2包,作为JDK7发行版的一部分。
NIO包与NIO.2包的性能比较如何?NIO到NIO.2的一些重大变化是什么?(例如新方法、新特性)NIO包?NIO.2只是现在的NIO包的同义词吗?这并不是说我想在代码中使用遗留包,我只是对此非常好奇。请告诉我他们的不同之处?
发布于 2014-08-28 00:57:54
Java最初通过在File包中提供java.io类来访问文件系统。该对象表示一个文件/目录,并允许您执行一些操作,例如检查文件/目录是否存在,获取属性并删除它。不过,它也有一些缺点。举几个例子:
boolean的方法。可以想象,在发生错误时,返回了false,而不是抛出异常。事实上,开发商没有办法知道为什么会失败。为了克服这些问题,在java 4中引入了java.nio包。
在java 7中,引入了java.nio.file包,为处理符号链接、文件属性访问提供了更好的支持,并特别支持通过路径、路径和文件等类扩展文件系统。您可能想看看java.nio.file包描述,以获得更多关于这方面的详细信息。
考虑到这一点:
从NIO到NIO.2有什么重大变化?(例如新方法、新特性)?
它们的用途各不相同。要指出重大变化,您可能需要查看所有新包java.nio.file。
为什么要更新原来的NIO包?
它没有。一个新的软件包被引进,而不是更新。
NIO.2只是现在NIO方案的同义词吗?与NIO.2包相比,NIO包的性能如何?
不,他们不是同义词。比较它们之间的性能也没有多大意义,因为它们的用途不同。NIO是一种比较抽象的底层数据I/O和NIO2,主要集中在文件管理上。
希望这能有所帮助。
参考书目: Oracle认证的专业Java SE7 -全面的OCJP7认证指南,由S.G.Ganesh和Tushar编写-第9章
发布于 2015-05-27 01:47:17
NIO.2介绍了 异步i/o.
异步I/O是NIO不支持的非阻塞i/o方法。
NIO:选择器/反应器模式
NIO.2:完成处理程序/ 前置器模式
因此,当在Windows上,NIO.2使用I/O完成端口,这应该会提高性能。但是,没有人知道,因为服务器端没有人使用Windows,如果使用,他们可能会这样做,因为他们在.net上投入了大量资金,因此很可能不会考虑使用Java。
发布于 2019-09-03 19:51:40
我的看法:
短版
它增加了java.nio.file包的高级别,大大增强了文件和文件系统的功能。
从网络套接字或低级文件访问的角度来看,NIO == NIO.2有一些方便的改进。
更长版本
Java IO
包装:java.io
旧阻塞I/O API
Java NIO
在Java1.4中添加了新的非阻塞API。
包装:java.nio
Java非阻塞IO。Selector,SelectorKey,Channel这样的类。
在我看来,NIO对于网络I/O (Selector、SelectorKey、SocketChannel、ServerSocketChannel、Buffer)来说是一个很大的进步,尤其是对于文件I/O (仅限于FileChannel和Buffer,包括内存映射文件)。对于网络和文件部分来说,这是一个相当低级别的API。
Java NIO.2
它是在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
相关链接
https://stackoverflow.com/questions/25537675
复制相似问题