Java——I/O流之字节、字符缓冲流

目录

引言

1、缓冲流的概述

1.1、缓冲流的分类

2、字节缓冲流

2.1、字节缓冲流构造方法

2.2、字节缓冲流输出流(BufferedOutputStream)构造方法演示 

2.3、字节缓冲流输出流(BufferedOutputStream)写方法

2.4、字节缓冲流输入流(BufferedInputStream)构造方法演示 

2.5、字节缓冲流输入流读方法

2.6、字节缓冲流复制文件

3、字符缓冲流

3.1、字符缓冲流的构造方法

3.2、字节缓冲输出流(BufferedReader)

3.3、BufferedReader特有方法readLine()

3.4、字节缓冲输入流(BufferedWriter)

3.5、BufferedWriter有方法

3.6、字符缓冲流复制

4、字节、字符流和字节、字符缓冲流的效率区别


 

引言

在我的上个文章中讲述了字节、字符流,本章讲述它们的升级版——字节、字符缓冲流,本次的缓冲流在效率上要比字节、字符流高出很多。

1、缓冲流的概述

缓冲流,也叫高效流,是对4个基本的`FileXxx` 流的增强,所以也是4个流,按照数据类型分类

通过定义数组的方式确实比以前一次读取一个字节的方式快很多,所以,看来有一个缓冲区还是非常好的。既然是这样的话,那么,java开始在设计的时候,它也考虑到了这个问题,就专门提供了带缓冲区的字节类。下面就是缓冲流的两个类:

写数据:BufferedOutputStream

读数据:BufferedInputStream

1.1、缓冲流的分类

名称
字节缓冲流BufferedInputStream    BufferedOutputStream
字符缓冲流BufferedReader       BufferedWriter

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

2、字节缓冲流

2.1、字节缓冲流构造方法

方法名说明
public BufferedInputStream(InputStream in)创建一个 新的缓冲输入流。
public BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流。

2.2、字节缓冲流输出流(BufferedOutputStream)构造方法演示 

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

    //相当于把字节流进行了一次装
    FileOutputStream fos = new FileOutputStream("a.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos);

    //简单写法
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));
    //也可以进行追加
    BufferedOutputStream bos = new BufferedOutputStream(new 
    FileOutputStream("a.txt",true));
    }
}

2.3、字节缓冲流输出流(BufferedOutputStream)写方法

public class BufferedOutputStreamDemo {
    public static void main(String[] args) throws IOException {
        BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream("a.txt",true));
        bo.write("\r\n".getBytes());
        bo.write("hello".getBytes());
        bo.write(98);
        byte[] bytes={'w','x','y','t'};
        bo.write(bytes,0,2);
        bo.close();
    }
}

2.4、字节缓冲流输入流(BufferedInputStream)构造方法演示 

public class BufferedInputStreamDemo {
    public static void main(String[] args) throws FileNotFoundException {
        File file=new File("a.txt");
        FileInputStream fi=new FileInputStream(file);
        BufferedInputStream b=new BufferedInputStream(fi);

        BufferedInputStream bi=new BufferedInputStream(new FileInputStream("a.txt"));
    }
}

2.5、字节缓冲流输入流读方法

public class BufferedInputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bi=new BufferedInputStream(new FileInputStream("a.txt"));
        int b;
        //一次读一个字节
        while((b=bi.read())!=-1){
            System.out.println((char)b);
        }
        bi.close();
    }
}
public class BufferedInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bi=new BufferedInputStream(new FileInputStream("a.txt"));
        byte[] bytes=new byte[1024];
        int len;
        //一次读一个字节数组
        while((len=bi.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }
        bi.close();
    }
}

2.6、字节缓冲流复制文件

public class BufferedCopy {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bi=new BufferedInputStream(new FileInputStream("a.txt"));
        BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream("b.txt"));
        byte[] bytes=new byte[1024];
        int len;
        while((len=bi.read(bytes))!=-1){
            bo.write(bytes,0,len);
        }
        bi.close();
        bo.close();
    }
}

3、字符缓冲流

3.1、字符缓冲流的构造方法

方法名说明
public BufferedInputStream(InputStream in)创建一个 新的缓冲输入流。
public BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流。
public class BufferedDemo {
        public static void main(String[] args) throws IOException {
        //相当于把字节流进行了一次装
        FileOutputStream fos = new FileOutputStream("a.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //简单写法
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));
        //也可以进行追加
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt",true));
    }
}

3.2、字节缓冲输出流(BufferedReader)

public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("a.txt"));
        char[] chars=new char[1024];
        int len;
        //一次读一个字符数组
        while((len=br.read(chars))!=-1){
            System.out.println(new String(chars,0,len));
        }
        br.close();
    }
}

3.3、BufferedReader特有方法readLine()

public class BufferedReaderDemo1 {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("a.txt"));
        //一次读一行数据
        String s = br.readLine();
        System.out.println(s);
        br.close();
    }
}

3.4、字节缓冲输入流(BufferedWriter)

public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException {
        BufferedWriter writer=new BufferedWriter(new FileWriter("a.txt",true));
        writer.write("hello");
        writer.write(97);
        writer.write(98);
        writer.close();
    }
}

3.5、BufferedWriter有方法

public class BufferedWriterDemo1 {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw=new BufferedWriter(new FileWriter("a.txt",true));
        bw.write(98);
        bw.write(99);
        //写一行行分隔符,由系统属性定义符号
        bw.newLine();
        bw.close();

    }
}

3.6、字符缓冲流复制

public class Copy {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("a.txt"));
        BufferedWriter bw=new BufferedWriter(new FileWriter("c.txt"));
        char[] chars=new char[1024];
        int len;
        //一次读取一个字符数组
        while((len=br.read(chars))!=-1){
            //写操作
            bw.write(chars,0,len);
            //刷新操作
            bw.flush();
        }
        //释放资源
        bw.close();
        br.close();
    }
}

4、字节、字符流和字节、字符缓冲流的效率区别

字节流四种方式复制文件(这里以一个34M的视频文件为例,代码不再展示):

基本字节流一次读写一个字节:    共耗时:117235毫秒
基本字节流一次读写一个字节数组: 共耗时:156毫秒
高效字节流一次读写一个字节: 共耗时:1141毫秒
高效字节流一次读写一个字节数组: 共耗时:47毫秒

由此可见:缓冲流的效率是比基本流的效率高的多的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值