面向流的IO与面向块的IO

Cha*_*ani 1 java io nio

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

chr*_*ke- 6

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


par*_*085 5

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

在此处输入图片说明

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

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

在此处输入图片说明

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

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

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

现在,您可以借助上图轻松了解io和nio之间的区别。这里有更多细节。