Java I / O类和性能

时间:2011-05-24 21:44:25

标签: java file

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:5)

  

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

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

答案 2 :(得分:2)

InputStream只会请求您请求的数据量,因此如果您一次请求一个字符1000个字符,那么将会变成1000个单独的磁盘访问,这将变得非常慢。

然而,BufferedInputStream将从更大的块中InputStream请求数据,从而减少了对单独磁盘访问的需求。

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