Java I / O类和性能

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

系统的IO缓冲与Buffered * putStream的级别不同。

FileOutputStream.write(...)上的每次调用都会引发本机方法调用(通常比java内部调用更昂贵),然后上下文切换到OS内核以进行实际写入。 即使内核(或文件系统驱动程序或硬盘控制器或硬盘本身)正在进行更多缓冲,也会发生这些成本。

通过在此周围包装BufferedOutputStream,我们将更少地调用本机写入方法,从而允许更高的吞吐量。

(同样适用于其他类型的IO,当然,我只是以FileOutputStream为例。)

是不是已经缓存了文件操作?

也许,也许不是 – 取决于操作系统,使用的HD,访问方式(例如,读取大的连续块与随机访问整个地方的小块)等等。在最坏的情况下,添加BufferedInputStream可能不会造成伤害表现明显。 在最好的情况下,它可以通过大小来改进它(用一个大的读/写代替许多小文件访问)。

一个InputStream只会请求你请求的数据量,所以如果你一次请求一个字符1000个字符,那将是1000个单独的磁盘访问,这将变得非常慢。

但是, BufferedInputStream将以较大的块从InputStream请求数据,从而减少了对单独磁盘访问的需求。

输出也是如此,而不是单独编写每个字符,使用BufferedOutputStream的物理磁盘写入次数较少。