Java 如果使用无缓冲I/O,缓冲I/O如何减少开销?
从 到目前为止,我们看到的大多数示例都使用无缓冲I/O 每个读或写请求都由底层操作系统直接处理。 这会使程序的效率大大降低,因为每个这样的请求 通常会触发磁盘访问、网络活动或其他操作 这是相对昂贵的 为了减少这种开销,Java平台实现了缓冲 I/O流。缓冲输入流从已知的内存区域读取数据 作为缓冲;本机输入API仅在缓冲区被激活时调用 空。类似地,缓冲输出流将数据写入缓冲区,并且 只有当缓冲区已满时才会调用本机输出API。 我知道磁盘访问、网络活动等操作会导致底层操作系统的内存或执行时间开销 但问题是程序对某个内存区域(缓冲区)的读写如何减少这种开销Java 如果使用无缓冲I/O,缓冲I/O如何减少开销?,java,inputstream,outputstream,bufferedwriter,bufferedinputstream,Java,Inputstream,Outputstream,Bufferedwriter,Bufferedinputstream,从 到目前为止,我们看到的大多数示例都使用无缓冲I/O 每个读或写请求都由底层操作系统直接处理。 这会使程序的效率大大降低,因为每个这样的请求 通常会触发磁盘访问、网络活动或其他操作 这是相对昂贵的 为了减少这种开销,Java平台实现了缓冲 I/O流。缓冲输入流从已知的内存区域读取数据 作为缓冲;本机输入API仅在缓冲区被激活时调用 空。类似地,缓冲输出流将数据写入缓冲区,并且 只有当缓冲区已满时才会调用本机输出API。 我知道磁盘访问、网络活动等操作会导致底层操作系统的内存或执行时间开销 但问
我认为这是对两个额外步骤的补充:首先程序请求操作系统,例如,从文件读取数据并将其写入缓冲区,然后程序从缓冲区读取数据 您可能知道,使用磁盘驱动器、网络连接或其他设备的IO操作要比内存访问慢得多。通过在内存中缓冲IO操作,软件可以减少在IO设备上执行的操作数量。嗯,我的RAM比我的HDD快得多,并且与CPU的连接比HDD或SSD都好。除了@Code apprentice的回答,您还可以查看此感谢。但这是否也意味着我的问题的最后一段是正确的,即使用缓冲流仍然需要请求操作系统从磁盘驱动器获取数据,并将其存储在我们的缓冲区中;从我们的程序将要阅读它的地方。我的意思是,缓冲区是有用的,因为一旦数据被放入缓冲区(由底层操作系统)中,我们的程序就可以多次读取数据,而无需每次请求操作系统。@Solace是的,通过缓冲,我们可以减少对操作系统执行IO操作的请求数量。这不仅对于一次又一次地读取相同的数据非常有用,而且对于从(例如)文件或网络中读取连续数据也非常有用。