Java I / O类和性能

问题描述

| 《 Java中的阅读思维》第4版。我对I / O操作性能有一些疑问: 我读到最好在BufferedInputStream中“包装” InputStream对象,但是在我看来,我看不出任何区别。文件操作是否已被缓冲?文件缓冲写的优点是什么?     

解决方法

系统的IO缓冲与Buffered * putStream处于不同的级别。 每次对“ 0”的调用都会引发一个本地方法调用(通常比Java内部调用的开销更大),然后将上下文切换到OS的内核以进行实际的编写。即使内核(或文件系统驱动程序,硬盘控制器或硬盘本身)进行更多的缓冲,也会产生这些费用。 通过围绕此方法包装BufferedOutputStream,我们将仅更不频繁地调用本机写入方法,从而允许更高的吞吐量。 (同样适用于其他类型的IO,当然,我只是使用FileOutputStream作为示例。)     ,  文件操作是否已被缓冲? 也许(也许不是)-取决于操作系统,所用的HD,访问方式(例如,读取大的连续块与随机访问整个地方的小块)等。在最坏的情况下,添加BufferedInputStream可能不会明显损害性能。在最佳情况下,它可以提高幅度(用一个大的读/写替换许多小的文件访问)。     ,
InputStream
只会请求您所请求的尽可能多的数据,因此,如果一次请求一个字符1000个字符,结果将是进行1000次单独的磁盘访问,这将变得非常慢。 但是,“ 2”将以更大的块从“ 1”中请求数据,从而减少了对单独磁盘访问的需求。 输出也一样,而不是单独写入每个字符,而是用
BufferedOutputStream
进行较少的物理磁盘写入。