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
系统调用次数 多(每次读都调用) 少(批量调用一次读入)
内存消耗 稍多(但可控)
读取效率
应用场景 数据量很小的临时读取 读取大量数据(文件/网络)

 

posted @ 2025-07-19 23:46  AlphaGeek  阅读(119)  评论(0)    收藏  举报