【发布时间】:2011-11-17 06:32:08
【问题描述】:
当我使用 FileInputStream 读取一个对象(比如几个字节)时,底层操作是否涉及:
1) 读取整个块 磁盘,这样如果我随后执行另一个读取操作,它就不需要真正的磁盘读取,因为文件的该部分已在上次读取操作中获取?
或
2) 因为FileInputStream 没有做任何缓冲,而应该使用bufferedInputStream 来实现新的磁盘访问,以达到(1) 的效果?
我认为,由于 FileInputStream 使用 read 系统调用,并且它只从硬盘读取一组页面,因此必须进行 一些缓冲。
【问题讨论】:
-
我对底层 OS IO 的了解不足以回答,但缓冲并不是避免多次调用的唯一原因。每个读取操作还涉及对本机方法的调用,这会产生一些开销。因此,减少本机方法调用的数量也很有用。
-
尝试一个简单的基准测试。您可能会注意到改进。
标签: java io disk fileinputstream