java - FileInputStream 是否已经在使用缓冲区?

标签 java io disk fileinputstream

当我使用 FileInputStream 读取一个对象(比如几个字节)时,底层操作是否涉及:

1) 读取磁盘的整个 block ,这样如果我随后执行另一个读取操作,就不需要真正的磁盘读取,因为文件的那部分已经在上次读取操作中获取了吗?

2) 由于 FileInputStream 不做任何缓冲而应该使用 bufferedInputStream 来实现 (1) 的效果,因此发生新的磁盘访问?

我认为,由于 FileInputStream 使用 read 系统调用并且它只从硬盘读取一组页面,因此必须进行一些缓冲。

最佳答案

FileInputStream 将进行底层 native 系统调用。大多数操作系统都会为此做自己的缓冲。所以它不需要为每个字节进行真正的磁盘寻道。但是,您仍然需要进行本地操作系统调用,这很昂贵。所以 BufferedStream 会更可取。但是,对于读取少量数据(如您所说,几个字节甚至 kB),任何一个都应该没问题,因为操作系统调用的数量不会有太大差异。

关于java - FileInputStream 是否已经在使用缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421004/

相关文章:

java - 防止在 JTree 中的节点扩展时选择节点

java - 在 servlet 中恢复控制后如何恢复该值?

java - 提供的关键元素与模式不匹配 - java

java - 当 Java 尝试递归地遍历带有循环符号链接(symbolic link)的目录结构时,会抛出什么样的 IO 错误?

java - 我应该如何在Java中暂时表示内存中的文件?

考虑捕获组的 Java 模式拆分

windows - 恒定的磁盘写入速度

guid - 数据如何存储在磁盘上? - EFI GUID

linux - 写入文件非常快,覆盖文件需要更长的时间

java - UTF-8 编码的 Java 字符串到属性中