MST
星途 面试题库

面试题:Java BIO中缓冲区策略相关基础

在Java BIO中,简述使用缓冲区(如BufferedInputStream和BufferedOutputStream)提高数据传输效率的基本原理是什么?
32.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 减少系统调用次数
    • 在Java BIO中,直接使用底层的InputStreamOutputStream进行读写操作时,每次读写往往都会触发系统调用。系统调用涉及用户态和内核态的切换,这种切换开销较大。
    • BufferedInputStreamBufferedOutputStream内部维护了一个缓冲区数组。例如,BufferedInputStream在读取数据时,会一次性从底层输入流中读取较大的数据块到缓冲区中(默认缓冲区大小为8192字节)。后续的读操作首先从缓冲区中获取数据,只有当缓冲区数据读完时,才会再次触发底层输入流的读取操作,即系统调用。这大大减少了系统调用的次数,从而提高了数据传输效率。
  2. 数据预读和缓存
    • BufferedInputStream在读取数据时,除了满足当前应用程序的读取请求外,还会提前从底层输入流中读取一部分数据到缓冲区。这样当下次应用程序请求数据时,如果所需数据在缓冲区中,就可以直接从缓冲区获取,而不需要再次从底层设备(如磁盘、网络等)读取,加快了数据获取速度。
    • 对于BufferedOutputStream,它会将应用程序要输出的数据先缓存到缓冲区中。当缓冲区满或者调用flush方法时,才会将缓冲区中的数据一次性写入到底层输出流。这避免了每次小数据量输出都进行系统调用,提高了输出效率。