FileInputStream与BufferedInputSteam比较

本文详细介绍了Java中InputStream的两种常见实现:FileInputStream和BufferedInputStream。FileInputStream用于直接从文件读取数据,而BufferedInputStream则提供缓冲功能,提高读取效率。通过代码示例展示了BufferedInputStream相比于FileInputStream在读取文件时的性能优势,强调了缓冲对于减少硬盘读取次数、提升效率的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InputStream

Java标准库提供的最基本的输入流,位于java.io包里,InputStream是一个抽象类,是所有输入流的超类

FileInputStream

1.FileInputStream是InputStream的子类,就是从文件流中读取数据。FileInputStream是读取一个文件来作InputStream。

BufferedInputStream

2.BufferedInputStream是缓存输入流。继承于FilterInputStream。作用是为另一个输入流添加一些功能。它的read方法表面上看,虽然是只读了一个字节,但它是开始时猛然从硬盘读入一大堆字节到自己的缓 存,当你read时,它是从缓存读进一个字节到内存。而前面讲的FileInputStream字节流,read时,都是真正每个字节都从硬盘到内存,是 很慢的
区别就是:

FileInputStream是字节流
BufferedInputStream是字节缓冲流

使用BufferedInputStream读资源比FileInputStream读取资源的效率高,而FileInputStream的read()方法会出现阻塞;
就是说,BufferedInputStream的效率更好。

(小知识)BufferedInputStream有一个默认为8192字节的缓冲区,当自定义的缓冲区小于8192的时候,默认一次性从硬盘中读取8192字节到内存中,然后每次只按自定义的缓冲量返回数据,性能好在了减少了读取硬盘的次数。

以下代码会更好的帮大家理解;
package Ex1;

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

/**
 * @Classname BufferedInputStream1
 * @Description TODO
 * @Date 2022/9/23 10:35
 * @Created by Administrator
 * @Author:ZhenYi
 */
public class BufferedInputStream1 {
    public static void main(String[] args) {
        String file = "C:\\image\\1.jpg";
        try (FileInputStream fis = new FileInputStream(file);
             //构造方法
             BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {

            //FileInputStream

            long t = System.currentTimeMillis();
            int c;
            while ((c = fis.read()) != -1) {
            }
            fis.close();
            t = System.currentTimeMillis() - t;
            System.out.println("FileInputStream 遍历文件用了如下时间:" + t);

            //使用缓冲流、提速
            //BufferedInputStream
            t = System.currentTimeMillis();
            while ((c = bis.read()) != -1) {
            }
            bis.close();
            t = System.currentTimeMillis() - t;
            System.out.println("BufferedInputStream 遍历文件用了如下时间:" + t);

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

对比如下读取时间,可以看出BufferedInputStream的效率更好
图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值