当我使用 FileInputStream 读取一个对象(比如几个字节)时,底层操作是否涉及:
1) 读取磁盘的整个 block ,这样如果我随后执行另一个读取操作,就不需要真正的磁盘读取,因为文件的那部分已经在上次读取操作中获取了吗?
或
2) 由于 FileInputStream 不做任何缓冲而应该使用 bufferedInputStream 来实现 (1) 的效果,因此发生新的磁盘访问?
我认为,由于 FileInputStream 使用 read 系统调用并且它只从硬盘读取一组页面,因此必须进行一些缓冲。
最佳答案
FileInputStream
将进行底层 native 系统调用。大多数操作系统都会为此做自己的缓冲。所以它不需要为每个字节进行真正的磁盘寻道。但是,您仍然需要进行本地操作系统调用,这很昂贵。所以 BufferedStream 会更可取。但是,对于读取少量数据(如您所说,几个字节甚至 kB),任何一个都应该没问题,因为操作系统调用的数量不会有太大差异。
关于java - FileInputStream 是否已经在使用缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421004/