IT-Swarm.Net

Java:NIO和NIO.2的区别究竟是什么?

我不太明白它们彼此有多么不同,所以我对这两个包有一些疑问。.

在谷歌上看了一下之后,似乎Oracle决定使用更新且增强的NIO.2软件包更新NIO软件包,作为JDK7版本的一部分。.

  1. NIO包的性能如何与NIO.2包进行比较?
  2. NIONIO.2有什么重大变化? (例如新方法,功能)
  3. 为什么原始的NIO包必须更新?
  4. NIO.2现在只是NIO包的同义词吗?

这不是我想在我的代码中使用遗留包,我只是对此非常好奇。请告诉我他们的不同之处?

68
John Huynh

Java最初是通过在Java.io包中提供File类来访问文件系统。此对象表示文件/目录,并允许您执行某些操作,例如检查文件/目录是否存在,获取属性并将其删除。但是,它有一些缺点。仅举几例:

  • File类缺少一些重要的功能,例如复制方法。.
  • 它还定义了许多返回boolean的方法。可以想象,如果出现错误,则返回false,而不是抛出异常。事实上,开发人员无法知道失败的原因。.
  • 没有提供有关支持符号链接的良好处理。.
  • 提供了一组有限的文件属性。.

为了克服这些问题,在Java 4中引入了Java.nio包。主要功能包括:

  • 通道和选择器:通道是较低级文件系统功能的抽象,例如,内存映射文件。.
  • 缓冲区:缓冲所有原始类(布尔除外)。.
  • Charset:Charset(Java.nio.charset),编码器和解码器,用于映射字节和Unicode符号

使用Java 7,引入了Java.nio.file包,为处理符号链接,文件属性访问提供了更好的支持,并特别支持通过路径,路径和文件等类扩展文件系统。您可能想查看 Java.nio.file包描述 以获取有关此内容的更多详细信息。.

考虑到这一点:

从NIO到NIO.2有哪些重大变化? (例如新方法,功能)?

它们用于不同的目的。要指出重大变化,您可能需要查看全新的包Java.nio.file。.

为什么原始的NIO包必须更新?

它没有。引入了一个新的包而不是更新。.

NIO.2现在只是NIO套件的代名词吗? NIO包的性能与NIO.2包相比如何?

不,他们不是同义词。比较它们之间的性能也没有多大意义,因为它们用于不同的目的。 NIO是一个更抽象的低级数据I/O和NIO2,专注于文件管理。.

希望这可以帮助。.

[参考书目:Oracle认证专业Java SE7 - 由S.G.Ganesh和Tushar Sharma撰写的全面的OCJP7认证指南 - 第9章]

70
Sousa Gaspar

快速,可靠且价格合理的云托管

注册并在30天内获得$50奖金!

NIO.2介绍 异步i/o。.

异步I/O是NIO不支持的非阻塞i/o的方法。.

NIO:选择器/反应器模式

NIO.2:完成处理程序/ proactor模式

因此,在Windows上, NIO.2使用I/O完成端口 ,这将提高性能。除此之外,没有人知道,因为没有人在服务器端使用Windows,如果他们这样做,他们可能会这样做,因为他们大量投资于.net,因此很可能不会考虑使用Java。.

43
Eugene Beresovsky