Java中,什么是缓冲功能Buffer?为什么提供该功能后就能提高读取效率?原理一文详解!
✅ 什么是缓冲功能?
缓冲功能是指:
通过引入内存中的“缓冲区”(buffer),将数据的读写从频繁的小操作,变成较少的大操作,从而提高效率。
在 Java 中,BufferedInputStream 就是提供了这样的缓冲能力。
🚀 为什么提供缓冲功能能提高读取效率?
这是因为 I/O 读写是非常慢的操作,尤其是:
-
读取磁盘文件(涉及硬件寻址)
-
网络读写(涉及系统调用)
-
控制台 I/O(涉及系统缓存)
而直接用原始流(比如 FileInputStream)读取时,每读取一个字节,Java 就调用一次底层操作系统的 I/O 接口,很慢。
但如果你使用了 BufferedInputStream:
-
它一次从底层读一大块数据(比如 8192 字节)到内存中的缓冲区
-
之后程序再从这个缓冲区按需读取
-
所以系统调用次数大大减少,性能显著提升
📦 形象类比:送快递 vs 搬箱子
| 类比场景 | 不使用缓冲 | 使用缓冲 |
|---|---|---|
| 场景 | 每送一个快递跑一次 | 先装满一车再一起送 |
| 描述 | 每读取 1 个字节都访问硬盘 | 一次读 8KB 到内存,之后从内存取 |
| 效率 | 很慢(I/O频繁) | 很快(内存操作) |
🧪 Java 示例对比
不使用缓冲流(效率低):
FileInputStream fis = new FileInputStream("test.txt"); int b; while ((b = fis.read()) != -1) { System.out.print((char) b); } fis.close();
每次 .read() 都是一次磁盘调用。
使用 BufferedInputStream(效率高):
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt")); int b; while ((b = bis.read()) != -1) { System.out.print((char) b); } bis.close();
它内部会一次性读取一个大块数据(比如 8192 字节)到缓冲区,之后从内存读取,速度大幅提升。
✅ 小结
| 对比维度 | 原始流(无缓冲) | 缓冲流(如 BufferedInputStream) |
|---|---|---|
| 系统调用次数 | 多(每次读都调用) | 少(批量调用一次读入) |
| 内存消耗 | 少 | 稍多(但可控) |
| 读取效率 | 低 | 高 |
| 应用场景 | 数据量很小的临时读取 | 读取大量数据(文件/网络) |

浙公网安备 33010602011771号