缓冲流、转换流

本文详细介绍了Java中的缓冲流和转换流,包括缓冲流的分类和原理,如BufferedOutputStream、BufferedInputStream、BufferedWriter和BufferedReader。同时,讲解了字节缓冲流和字符缓冲流的使用,以及BufferedOutputStream和BufferedInputStream的构造方法和效率提升原理。此外,还探讨了字符转换流InputStreamReader和OutputStreamWriter的作用,以及如何指定编码进行读写操作。
摘要由CSDN通过智能技术生成

1.1 概述

1.1 缓冲流的分类

  • 缓冲流概述
  1. 缓冲流又称为高效流
  • 缓冲流的分类
  1. 字节缓冲输出流:BufferedOutputStream
  2. 字节缓冲输入流:BufferedInputStream
  3. 字符缓冲输出流:BufferedWriter
  4. 字符缓冲输入流:BufferedReader
  • 缓冲流的使用方式和非缓冲流使用方式是一样的,区别在于构造方法不一样

1.1.2 缓冲流的原理

  •  利用缓冲区数组临时存储多个数据,等 缓冲区数组满了或调用了close方法时一次调用或减少底层资源的调用次数从而提高读写速度。

1.2 字节缓冲流

1.2.1 字节输出缓冲流: 

  • BufferedOutputStream类概述
  1. 继承OutputStream,是字节缓冲输出流,可以往任意类型的文件输出数据。
  • BufferedOutputStream类构造方法
  • BufferedOutputStream(OutputStream   out)
  1. 根据字节输出流创建字节缓冲输出流对象。
  2. 目前可以传递的子类有:FileOutputStream
  3. 传递谁就提高谁的效率。
  • BufferedOutputStream类成员方法
  1. write:输出一个字节,一个字节数组
  • BufferedOutputStream类使用注意事项:
  1. 调用缓冲流的write方法输出数据不是直接输出到目标文件中,而是先输出到缓冲区数组中,等缓冲区数组满了或调用了flush或close方法才会将缓冲区数组的数据通过FileOutputStream输出到目标文件中。
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class BufferedOutputStreamDemo01 {
    public static void main(String[] args) throws Exception {
        //创建字节输出流对象并关联目标文件
        FileOutputStream fos = new FileOutputStream("H:/aa.txt",true);
        //创建字节缓冲输出流对象
        BufferedOutputStream bos = new BufferedOutputStream(fos);

        //输出一个字节
        bos.write(98);

        //输出一个字节数组
        bos.write("我爱java\r\n".getBytes());

        //关闭流释放资源
        bos.close();
    }
}

 效率测试

import java.io.FileInputStream;
import java.io.FileOutputStream;
/*
    普通流:(复制400M的文件)
 */
public class BufferDemo {
    public static void main(String[] args) {
        //记录开始时间
        long start = System.currentTimeMillis();

         try(//创建输入流对象并关联源文件
             FileInputStream fis = new FileInputStream("H:/jre-9.0.1.zip");
             //创建输出流对象并关联目标文件
             FileOutputStream fos = new FileOutputStream("H:/copy.zip");
             ) {
             //读写数据
             int b;
             while ((b=fis.read())!=-1){
                 fos.write(b);
             }

         }catch (Exception e){
             e.printStackTrace();
         }
         //记录结束的时间
        long end = System.currentTimeMillis();
        System.out.println("普通流复制时间:"+(end-start));
    }
}
/*
    十几分钟过去了...
 */
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/*
    缓冲流:(复制400M的文件)
 */
public class BufferDemo {
    public static void main(String[] args) {
        //记录开始时间
        long start = System.currentTimeMillis();

         try(
                 //创建输入流对象并关联源文件
             FileInputStream fis = new FileInputStream("H:/jre-9.0.1.zip");
             BufferedInputStream bis = new BufferedInputStream(fis);
             //创建输出流对象并关联目标文件
             FileOutputStream fos = new FileOutputStream("
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyhcloud

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值