面向流的IO与面向块的IO

时间:2013-09-07 19:48:53

标签: java io nio

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

enter image description here

NIO 中,您可以处理频道缓冲区进行I / O操作。

频道就像一条小溪。它表示数据源/接收器和用于数据传输的Java程序之间的连接。

enter image description here

频道与流之间存在一个区别。

  • 流可用于单向数据传输。也就是输入 stream只能将数据从数据源传输到Java程序; 输出流只能将数据从Java程序传输到数据 下沉。
  • 但是,渠道提供双向数据传输工具。

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

现在,您可以通过上面的图片轻松了解io和nio之间的区别。 More detail here.

答案 2 :(得分:2)

来自 Source : -

  

IO与NIO

     

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