Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果使用无缓冲I/O,缓冲I/O如何减少开销?_Java_Inputstream_Outputstream_Bufferedwriter_Bufferedinputstream - Fatal编程技术网

Java 如果使用无缓冲I/O,缓冲I/O如何减少开销?

Java 如果使用无缓冲I/O,缓冲I/O如何减少开销?,java,inputstream,outputstream,bufferedwriter,bufferedinputstream,Java,Inputstream,Outputstream,Bufferedwriter,Bufferedinputstream,从 到目前为止,我们看到的大多数示例都使用无缓冲I/O 每个读或写请求都由底层操作系统直接处理。 这会使程序的效率大大降低,因为每个这样的请求 通常会触发磁盘访问、网络活动或其他操作 这是相对昂贵的 为了减少这种开销,Java平台实现了缓冲 I/O流。缓冲输入流从已知的内存区域读取数据 作为缓冲;本机输入API仅在缓冲区被激活时调用 空。类似地,缓冲输出流将数据写入缓冲区,并且 只有当缓冲区已满时才会调用本机输出API。 我知道磁盘访问、网络活动等操作会导致底层操作系统的内存或执行时间开销 但问

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

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

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

但问题是程序对某个内存区域(缓冲区)的读写如何减少这种开销


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

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

嗯,我的RAM比我的HDD快得多,并且与CPU的连接比HDD或SSD都好。除了@Code apprentice的回答,您还可以查看此感谢。但这是否也意味着我的问题的最后一段是正确的,即使用缓冲流仍然需要请求操作系统从磁盘驱动器获取数据,并将其存储在我们的缓冲区中;从我们的程序将要阅读它的地方。我的意思是,缓冲区是有用的,因为一旦数据被放入缓冲区(由底层操作系统)中,我们的程序就可以多次读取数据,而无需每次请求操作系统。@Solace是的,通过缓冲,我们可以减少对操作系统执行IO操作的请求数量。这不仅对于一次又一次地读取相同的数据非常有用,而且对于从(例如)文件或网络中读取连续数据也非常有用。