FileInputStream 没有缓冲,为什么 BufferedInputStream 更快?

关于IO,我有两个问题。


答:在教程和一些 StackOverflow 答案中,他们声称FileInputStream没有缓冲。真的吗 ?


以下代码用于FileInputStream将数据读入字节数组(1024 字节)


class Test {

    public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("./fos.txt");

        FileOutputStream fos = new FileOutputStream("./copy.txt");


        byte[] buffer = new byte[1024];   // Is this a buffer ? 


        int len;

        while ((len = fis.read(buffer))!= -1) {

            fos.write(buffer);

        }


        fos.close();

        fis.close();

    }

}

从 API 中,有一行:


public int read(byte b[]) 抛出 IOException


@param b:读取数据的缓冲区。

B、如果都被缓冲了,都将数据放入缓冲区,然后从缓冲区中取数据,究竟是哪里BufferedInputStream比 快FileInputStream?


谢谢


阿波罗的战车
浏览 228回答 2
2回答

忽然笑

FileInputStream 确实没有缓冲,但它在读取时确实提供了有限的缓冲能力。最大的区别是 BufferedInputStream 支持 mark() 和 reset() 而 FileInputStream 不支持。mark(int readlimit) 将允许您在流中设置一个位置供以后使用。reset() 会将您在流中的位置设置为 mark(int readLimit) 中指定的位置为了支持 mark() 和 reset() BufferedInputStream 必须维护一个内部缓冲区,而 FileInputStream 则不会。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java