当前位置: 首页 > 面试题库 >

Java:NIO和NIO.2之间到底有什么区别?

吴涵育
2023-03-14
问题内容

我不太了解它们之间的区别,因此我对这两个软件包有一些疑问。

在Google上浏览了一下之后,似乎Oracle决定使用JDK7版本NIO的更新和增强NIO.2软件包来更新该软件包。

  1. NIO封装的性能与封装相比如何NIO.2
  2. NIO到有NIO.2什么大变化?(例如新方法,功能)
  3. 为什么NIO必须对原始软件包进行更新?
  4. 如今是NIO.2NIO软件包的代名词吗?

这并不是我想在代码中使用旧版包,我对此真的很好奇。请告诉我他们的区别?


问题答案:

Java最初是通过Filejava.io程序包中提供类来访问文件系统而开始的。该对象表示文件/目录,并且确实允许您执行一些操作,例如检查文件/目录是否存在,获取属性并删除它。但是,它有一些缺点。仅举几例:

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

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

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

在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章]



 类似资料:
  • java nio select的代码和linux epoll的代码看起来是一样的。没有循环来获取套接字fd,linux选择代码片段确实使用循环来获取套接字fd。 所以我的问题是,java nio select和linux epoll的方式相同吗? java nio选择 linux e轮询 linux选择

  • 显然,我希望答案是肯定的,所以首先我尝试了,但结果是1。我推断这是因为Python将计算为。为了解决这个问题,我发现可以使用,问题解决了。 但我找到了另一个解决方案,即(为了进行比较,我包含了前面的示例): 我无法解释为什么包括0有帮助。我已经阅读了关于“组织”的文件,但我在那里没有找到任何帮助。我以为可能是因为评审顺序的原因: null

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 本文向大家介绍interface 和 type 到底有什么区别?相关面试题,主要包含被问及interface 和 type 到底有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 interface 和 type 到底有什么区别? 作者:rottenpen

  • 问题内容: 基本上就是这个问题(括号很重要) 问题答案: 并且针对 所有 请求 一起使用 ,在第 一个 同时请求开始时触发,然后在该同时批处理的 最后一个 完成时触发。 因此,假设您一次发出3个请求,在第一个请求开始时触发,在最后一个请求返回时(它们不一定按顺序完成)触发。 这些事件 没有 任何参数,因为它们是针对一批请求的: 并在 每个请求 发送/完成后触发一次。这就是为什么这些处理程序传递参数

  • 问题内容: 今天,我按照一些说明在Linux中安装软件。有一个脚本需要首先运行。它设置一些环境变量。 指令告诉我要执行,但是我执行错误了。因此未设置环境。最后,我注意到了这一点并继续进行。 我想知道这两种调用脚本方法的区别。我对Linux完全陌生,所以请尽可能详细。 问题答案: 运行脚本,将启动一个新的运行脚本的外壳。新的外壳程序不会影响启动脚本的父外壳程序。 是的简写形式,它将在当前shell中