1

Java 有面向流的 IO(java.io. ) 和面向块的 IO(java.nio. )。面向块的 IO 如何提高 IO 的性能?

4

3 回答 3

6

基于流的 I/O使用流在数据源/接收器和 Java 程序之间传输数据。Java 程序一次读取或写入流一个字节。这种执行 I/O 操作的方法很慢。新的输入/输出 (NIO) 解决了旧的基于流的 I/O 中的慢速问题。

在此处输入图像描述

NIO中,您处理 I/O 操作的通道缓冲区

通道就像流。它表示数据源/接收器和用于数据传输的 Java 程序之间的连接。

在此处输入图像描述

通道和流之间有一个区别。

  • 流可用于单向数据传输。也就是说,输入流只能将数据从数据源传输到Java程序;输出流只能将数据从 Java 程序传输到数据接收器。
  • 但是,通道提供双向数据传输功能。

您可以使用通道来读取数据以及写入数据。您可以根据需要获取只读通道、只写通道或读写通道。

于 2014-10-23T06:50:24.043 回答
6

主要是通过减少复制的需要。由于面向流的 API 必须将所有内容移动到托管 Java 变量中,因此系统必须复制您处理的所有数据。当您使用 NIO 库时,Java 可以直接映射到 OS I/O 页面,而无需进行复制(并处理分配和垃圾收集)。

于 2013-09-07T19:55:04.217 回答
2

源头:-

IO 与 NIO

NIO 构造使 I/O 比传统 I/O 更快。在 I/O 操作构成大量处理的程序中,预计会看到一些差异。例如,如果应用程序必须使用套接字复制文件或传输字节,则使用 Nio 可以获得更快的性能,因为它比 I/O API 更接近操作系统。增加字节大小,差异变得更加明显。Nio 还提供了 io API 中没有的其他功能,用于流式操作。但是,由于 NIO API 向 java.io 添加了功能,因此无法用 NIO 替代 IO。NIO 扩展了原生 IO API,为开发人员以强大的方式操作流数据引入了新的可能性。

于 2013-09-07T19:55:14.023 回答