java中的IO缓冲流(高效流)---原始流的升级版

前言必读

​​​​​​​读者手册(必读)_云边的快乐猫的博客-CSDN博客

一、知识点解释:

1.什么是缓冲流?

答:就是比原始流(加File的流)传输效率更加快的流。

优点:

1.自带缓冲区,读写性能更加强悍

2.自带8k缓冲区,原始流是1k

直白理解:就是原先传输的只是水管慢慢传,现在加上了一个水塔,可以提前缓存更多的数据。

2.语法?

答:和原始流差不多。一样用到多态的方法。抽象类前面加上Buffere就好了

字节缓冲输入流(BuffereInputStream) 

字节缓冲输出流(BuffereOutputStream

字符缓冲输入流(BuffereReader

字符缓冲输出流(BuffereWriter

直白理解:就是在原始流一样语法,然后多加一条加强语句就好了

二、代码例子:

1.缓冲字节流

代码解释:这里用一个文件复制的例子,里面包含了字节输入和字节输出流去理解。结合数组来用,就是字节流速度达到了最快的程度。下面代码里面有教快速的数组读写方法和一个一个字节的缓慢读取方法

例子:

package bao;
import java.io.*;

public class Test {
    public static void main(String[] args) throws Exception {
        //1.创建要复制的文件地址
        InputStream in = new FileInputStream("D:\\java_base\\SE\\src\\bao\\大富豪.txt");//原始流语句
        InputStream bin = new BufferedInputStream(in);//加上高级缓冲流语句
        //2.创建要粘贴到的目标地址
        OutputStream out = new FileOutputStream("D:\\java_base\\SE\\src\\bao\\继承者.txt");//原始流语句
        BufferedOutputStream bout = new BufferedOutputStream(out);//加上高级缓冲流语句

        //3.中介管道转移数据
        //传输快速的数组方法。缓慢的读写方法放在其他知识点下面了
        byte[] bytes = new byte[1024];//数据交接的桶,1024大小
        int len;//记录每次读取的字节
        while ((len = bin.read(bytes))!=-1){//读
            bout.write(bytes,0,len);//写
        }
        //关闭流
        bin.close();
        bout.close();
    }
}
//其他知识点:代码每次运行都会覆盖之前的数据,如果想不被覆盖,就在原始输出流地址的后面加上true就可以了。
//传输缓慢的一个一个字节读写的方法
/*
 int b;
     while ((b=bin.read())!=-1){
        bout.write(b);
          }*/

素材

运行结果:

 2.缓冲字符流

代码解释:缓冲字符流比原始流读写更加的快速。而且新增了一个readLine(行读取)功能。字节流和字符流代码功能基本一样,只要改抽象类和基本数据类型------字节用byte,字符用char就好了

例子:

字符缓冲输入流(读取):

package bao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;

public class Test {
    public static void main(String[] args) throws Exception {
        //1.原始流:创建读取文件的对象
        Reader fr = new  FileReader("D:\\java_base\\SE\\src\\bao\\大富豪.txt");
        //2.缓冲流:给原始流加上
        BufferedReader br = new BufferedReader(fr);
        String line;//缓冲桶
        while ((line = br.readLine())!=null){//读文件数据内容
            System.out.println(line);//输出
        }
        br.close();//关闭流
    }
}

素材:

运行结果:

第二行:锦瑟无端五十弦,一弦一柱思华年
第三行:庄生晓梦迷蝴蝶,望帝春心托杜鹃
ADFASF985 

 字符缓冲输出流(写入):

例子:

package bao;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Test {
    public static void main(String[] args) throws IOException {
        //1.原始流。创建要写入数据的对象
        Writer fw = new FileWriter("D:\\java_base\\SE\\src\\bao\\风花雪月.txt");//每次写入都会覆盖之前的,本行括号行尾里面加上true就好了
        //2.缓冲流。给原始流加强
        BufferedWriter bw = new BufferedWriter(fw);

        //3.单独写入数据
        bw.write("天亮了啊");//只能单独写入数字
        bw.newLine();//换行
        bw.write('K');//只能单独写入一个字节
        bw.newLine();//换行

        //4.大量写入数据。用到数组
        char[] chars ="今日海棠花未眠kk99,4332".toCharArray();
        bw.write(chars);//把数组的全部写进去。也可以截取写进去
        bw.write("\r\n");//换行
        bw.close();//关闭流
    }
}

 运行结果:

天亮了啊

K

今日海棠花未眠kk99,4332

旁白:缓冲流和原始流写法差不多,就是在原始流写好的基础上加上一条缓冲流语句。这个语句就是抽象类前面加上这个就可以了Buffere。缓冲流还多加了一条语法(行读取)的读写Line

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云边的快乐猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值