缓冲I / O如何减少使用无缓冲I / O时可能发生的开销?

时间:2016-02-22 17:41:39

标签: java inputstream outputstream bufferedwriter bufferedinputstream

来自this tutorial

  

到目前为止,我们看到的大多数示例都使用无缓冲的 I / O.这意味着   每个读或写请求由底层OS直接处理。   由于每个这样的请求,这可以使程序效率低得多   通常会触发磁盘访问,网络活动或其他一些操作   这是相对昂贵的

     

为了减少这种开销,Java平台实现了缓冲   I / O流。缓冲输入流从已知的存储区读取数据   作为缓冲区;仅当缓冲区为时,才会调用本机输入API   类似地,缓冲输出流将数据写入缓冲区,并且   仅当缓冲区已满时才会调用本机输出API。

据我所知,磁盘访问,网络活动等操作会导致底层操作系统的内存或执行时间开销。

但问题是,程序读取/写入某个内存区域(缓冲区)如何减少这种开销?

我认为这是一些额外步骤的补充:首先,程序要求操作系统例如从文件读取数据并将其写入缓冲区,然后程序从缓冲区中读取数据。

1 个答案:

答案 0 :(得分:2)

您可能知道,使用磁盘驱动器,网络连接或其他设备的IO操作比内存访问慢得多。通过缓冲内存中的IO操作,软件可以减少IO设备上执行的操作数量。