BufferedInputStream、BufferedOutputStream 字节缓冲输入输出流

12 篇文章 0 订阅
BufferedInputStream 字节缓冲输入流
  • 图解:
    在这里插入图片描述
  • 特点:
     BufferedInputStream不是节点流,属于处理流,高级流,所以需要通过其他节点流(使用底层的低级流InputStream派生类的对象实例)连接到具体的数据源/介质。
  • 构造方法:
//继承FilterInputStream
//创建默认大小的输入缓冲区的缓冲字节输入流
 	public BufferedInputStream(InputStream in) {
        this(in, defaultBufferSize);
    }
//创建给定大小的输入缓冲区的缓冲字节输入流
    public BufferedInputStream(InputStream in, int size) {
        super(in);
        if (size <= 0) {
            throw new IllegalArgumentException("Buffer size <= 0");
        }
        buf = new byte[size];
    }
  • 方法介绍:
int read()
int read1(byte[] b, int off, int len)
int read(byte b[], int off, int len)
int available():返回可以从此输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。接下来的调用可能是同一个线程,也可能是不同的线程。一次读取或跳过这么多字节将不会受阻塞,但可以读取或跳过数量更少的字节。 
long skip(long n) 
void mark(int readlimit)
void reset() 
boolean markSupported()
void close()
//其他上述方法的作用于InputStream作用相同
  • 读操作具体步骤:
    1.创建BufferedInputStream对象;
    2.从打开的字节缓冲输入流读取字节数据;
    3.关闭流。
BufferedOutputStream 字节缓冲输出流
  • 图解:
    在这里插入图片描述
  • 特点:
     BufferedOutputStream实现缓冲的输出流。通过这种流,应用程序可以将各字节写入到底层输出流中,而不必针对每次字节写入调用底层系统,从而提高效率。
  • 构造方法:
//继承FilterOutputStream
//可以指定缓冲区的大小,或者用默认的大小
 	public BufferedOutputStream(OutputStream out) {
        this(out, 8192);
    }
    public BufferedOutputStream(OutputStream out, int size) {
        super(out);
        if (size <= 0) {
            throw new IllegalArgumentException("Buffer size <= 0");
        }
        buf = new byte[size];
    }
  • 基本方法:
void write(int b)
void write(byte b[], int off, int len)
void flush() 
  • 写操作具体步骤:
    1.创建BufferedOutputStream对象;
    2.写入字节到缓冲输出流;
    3.关闭流。
练习:

比较BufferedInputStream字符缓冲输入流的写入与FileInputStream读取数据效率。

/*
* 一个相对比较大的文件进行进行读取,FileInputStream和BufferInputStream 的耗时性比较*/
public class ComBufferFileIn190322 {
    public static void main(String[] args) throws IOException {
        long t1,t2;
        t1 = System.currentTimeMillis();//获取系统的时间

        String path = "G:\\test.txt";

        FileInputStream fis = new FileInputStream(path);

        int read = 0;
        while ((read = fis.read()) != -1) {
            fis.read();
        }

        fis.close();
        t2 = System.currentTimeMillis();
        System.out.println("使用文件输入流读取时间:"+(t2 - t1));

        long t3,t4;
        t3 = System.currentTimeMillis();

        FileInputStream fileInputStream = new FileInputStream(path);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

        int red = 0;
        while ((red = bufferedInputStream.read()) != -1) {
            bufferedInputStream.read();
        }

        bufferedInputStream.close();
        t4 = System.currentTimeMillis();
        System.out.println("使用字节缓冲流读取的时间:"+ (t4 - t3));


    }
}
//test.txt 文件是随机产生的数据,每一行的数据个数不定。
//output:
使用文件输入流读取时间:45
使用字节缓冲流读取的时间:1

结果充分体现了Buffered流提高访问效率的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值