MST

星途 面试题库

面试题:Java中如何使用BufferedInputStream提升I/O性能并进行基准测试

请阐述在Java的I/O操作中,BufferedInputStream是如何提升性能的。同时,给出一个简单示例代码,展示如何使用BufferedInputStream读取文件,并使用Java自带的System.currentTimeMillis()方法对其读取操作进行性能基准测试。
17.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

BufferedInputStream提升性能原理

BufferedInputStream内部维护了一个缓冲区(字节数组)。在读取数据时,它不是每次都直接从底层输入流(如文件流)读取一个字节,而是一次性从底层输入流读取较大的数据块到缓冲区中。后续的读取操作首先从缓冲区获取数据,只有当缓冲区的数据读完后,才会再次从底层输入流填充缓冲区。这样减少了与底层物理设备(如磁盘)的交互次数,因为磁盘I/O操作相对内存操作来说非常耗时,从而大大提升了性能。

示例代码

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamPerformanceTest {
    public static void main(String[] args) {
        String filePath = "test.txt";
        long startTime = System.currentTimeMillis();
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath))) {
            int data;
            while ((data = bis.read()) != -1) {
                // 这里可以对读取的数据进行处理,例如打印
                // System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("BufferedInputStream读取文件耗时: " + (endTime - startTime) + " 毫秒");
    }
}