Java最初开始时通过提供File
类,在java.io
包中访问文件系统。这个对象代表一个文件/目录,并允许你执行一些操作,比如检查文件/目录是否存在,获取属性并删除它。但它有一些缺点。仅举几例:
- File类缺少一些重要的功能,例如复制方法。
- 它还定义了许多返回
boolean
的方法。可以想象,如果发生错误,返回false
,而不是抛出异常。事实上,开发者无法知道它为什么失败。
- 未提供对符号链接支持的良好处理。
- 提供了一组有限的文件属性。
为了克服这些问题,java.nio包在Java被引入4的主要功能是:
- 频道和选择:通道是在较低级别的文件系统功能,例如一个抽象内存映射文件。
- 缓冲区:缓冲所有原始类(布尔除外)。
- 字符集:字符集(java.nio.charset中),编码器和解码器来映射字节和Unicode符号
与Java 7 java.nio.file包被引入用于处理符号链接提供了更好的支撑,文件属性访问,并特别支持通过路径,路径和文件等类扩展文件系统。您可能想看看java.nio.file package description以了解更多详情。
考虑到这一点:
都有些什么大的变化,从NIO到NIO.2? (例如新方法, 功能)?
他们服务于不同的目的。要指出重大更改,您可能需要查看全新套件java.nio.file
。
为什么最初的NIO包必须更新?
它没有。一个新的软件包被引入而不是更新。
现在NIO.2是否与NIO软件包同义? NIO包的性能与NIO.2包相比如何?
不,它们不是同义词。比较它们之间的性能也没有多大意义,因为它们服务于不同的目的。 NIO更抽象的低级别数据I/O和NIO2专注于文件管理。
希望这会有所帮助。
[参考书目:Oracle认证专家的Java SE7 - 全面OCJP7认证指南, 通过S.G.Ganesh和图莎尔夏尔马 - 第9章]
NIO2引入了异步I/O和java.nio.files包。 – EJP 2014-08-27 22:21:00
是吗?我有一个印象NIO.2是巨大的。 – 2014-08-27 22:28:32
首先他们有IO。然后他们介绍了“新IO”。然后他们想要引入更多功能,所以他们巧妙地将其命名为“New IO 2”。 – Kayaman 2014-08-27 22:37:07