Java之缓冲流

1.缓冲流:

      字节流于字符流:属于IO流的入门,那么即将学习的是更强大的流
      缓冲流:高效流,是在基本流对象的基础上创建而来的,就像普通人穿上铠甲一样,相当于对基础流的一种增强
              就是对四个基本的FileXXX流的增强,所以缓冲流也分为四个流
      按照类型来区分:
          字节缓冲流:BufferedInputStream、BufferedOutputStream
          字符缓冲流:BufferedReader、BufferedWriter
      缓冲流的基本原理,是在创建流对象的时候,会创建一个内置的默认大小的缓冲区数组,通过缓冲区进行读写,减少系统IO的次数,提高读写效率

2.字节缓冲流的使用:

      特点:读写效率高
      构造方法:
          - public BufferedInputStream(InputStream in):创建一个 新的缓冲输入流
          - public BufferedOutputStream(OutputStream out):创建一个 新的缓冲输出流

public class Tests {
    public static String str = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\a.avi";
    public static String str1 = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\copy_01解释性脚本语言初探.avi";
   
    public static void main(String[] args) throws IOException {

        //method1();
        //method2();
        //method3();
        method4();

    }
    // 使用字节进行读写  普通流读写:24秒
    private static void method1() throws IOException {
        // 1.创建字节缓冲输入流对象,关联a.avi
        FileInputStream fis = new FileInputStream(str);
        // 创建字节缓冲输出流对象,关联a_copy.mp4
        FileOutputStream fos = new FileOutputStream(str1);
        // 普通流拷贝视频软件
        // 0.获取当前系统时间
        long l = System.currentTimeMillis();
        // 1.定义一个int类型的变量。存储读取到的字节数据
        int len;
        // 2.循环读取数据
        while ((len = fis.read()) != -1){
            fos.write(len);
        }
        // 3.关闭流
        fos.close();
        fis.close();
        // 0.获取当前系统时间
        long l1 = System.currentTimeMillis();
        // 计算2个时间差
        System.out.println("总共花了"+(l1-l)+"毫秒");
    }
    // 使用字节进行读写  缓冲流读写:123毫秒
    private static void method2() throws IOException {
        // 1.创建字节缓冲输入流对象,关联a.avi
        FileInputStream fis = new FileInputStream(str);
        BufferedInputStream bis = new BufferedInputStream(fis);
        // 创建字节缓冲输出流对象,关联a_copy.mp4
        FileOutputStream fos = new FileOutputStream(str1);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 普通流拷贝视频软件
        // 0.获取当前系统时间
        long l = System.currentTimeMillis();
        // 1.定义一个int类型的变量。存储读取到的字节数据
        int len;
        // 2.循环读取数据
        while ((len = bis.read()) != -1){
            bos.write(len);
        }
        // 3.关闭流
        fos.close();
        fis.close();
        // 0.获取当前系统时间
        long l1 = System.currentTimeMillis();
        // 计算2个时间差
        System.out.println("总共花了"+(l1-l)+"毫秒");
    }
    // 使用字节数组进行读写  普通流读写:16毫秒
    private static void method3() throws IOException {
        // 1.创建字节缓冲输入流对象,关联a.avi
        FileInputStream fis = new FileInputStream(str);
        // 创建字节缓冲输出流对象,关联a_copy.mp4
        FileOutputStream fos = new FileOutputStream(str1);
        // 普通流拷贝视频软件
        // 0.获取当前系统时间
        long l = System.currentTimeMillis();
        // 1.定义一个int类型的变量。存储读取到的字节数据
        int len;
        byte[] bytes = new byte[10240];
        // 2.循环读取数据
        while ((len = fis.read(bytes)) != -1){
            fos.write(bytes,0,len);
        }
        // 3.关闭流
        fos.close();
        fis.close();
        // 0.获取当前系统时间
        long l1 = System.currentTimeMillis();
        // 计算2个时间差
        System.out.println("总共花了"+(l1-l)+"毫秒");
    }
    // 使用字节数组进行读写  缓冲流读写:15毫秒
    private static void method4() throws IOException {
        // 1.创建字节缓冲输入流对象,关联a.avi
        FileInputStream fis = new FileInputStream(str);
        BufferedInputStream bis = new BufferedInputStream(fis);
        // 创建字节缓冲输出流对象,关联a_copy.mp4
        FileOutputStream fos = new FileOutputStream(str1);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 普通流拷贝视频软件
        // 0.获取当前系统时间
        long l = System.currentTimeMillis();
        // 1.定义一个int类型的变量。存储读取到的字节数据
        int len;
        byte[] bytes = new byte[10240];
        // 2.循环读取数据
        while ((len = bis.read(bytes)) != -1){
            bos.write(bytes,0,len);
        }
        // 3.关闭流
        fos.close();
        fis.close();
        // 0.获取当前系统时间
        long l1 = System.currentTimeMillis();
        // 计算2个时间差
        System.out.println("总共花了"+(l1-l)+"毫秒");
    }
}

3.字符缓冲流:

      构造方法:
          - public BufferedReader(Reader in):创建一个 新的缓冲输入流
          - public BufferedWriter(Writer out):创建一个 新的缓冲输出流
      特有的方法:
          - BufferedReader:public String readLine():读一行文字,如果已到了流的末尾,返回 null
          - BufferedWriter:public void newLine():写一行 行分隔符,由系统属性定义符号

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

        FileWriter fw = new FileWriter(path1);
        BufferedWriter bw = new BufferedWriter(fw);

        // 写数据
        bw.write("鹅鹅鹅");
        bw.newLine();
        bw.write("白毛浮绿水,");
        bw.newLine();
        bw.write("曲项向天歌。");
        bw.newLine();
        bw.write("红掌拨清波,");
        bw.newLine();
        bw.write("骆宾王的咏鹅");
        bw.newLine();
        // 关闭流
        bw.close();
        method01();

    }

    private static void method01() throws IOException {
        // 创建字符缓冲流对象
        FileReader fr = new FileReader(path);
        BufferedReader br = new BufferedReader(fr);
        // 定义一个String变量,用来存储读到的行数据
        String line;
        // 循环读取数据
        while ((line = br.readLine()) != null){
            System.out.println(line);
        }
        // 关闭流
        br.close();
    }


    public static String path = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\b.txt";
    public static String path1 = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\b_copy.txt";
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值