IO流-6.节点流和处理流

1.基本介绍

  1. 节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter(文件、数组、管道和字符串);
  2. 处理流也叫包装流,是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader,BufferedWriter(比如:BufferedReader类中,有属性Reader,即可以封装一个节点流,该节点流可以是任意的,只要是Reader子类。)。

2.结点流和处理流的区别和联系

  1. 节点流是底层流/低级流,直接跟数据源相连;
  2. 处理流包装节点流,即可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出;
  3. 处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连【修饰器设计模式】;

1.处理流的功能主要体现在以下两方面

  1. 性能的提高:主要以增加缓冲的方式来提高输入输出的效率;
  2. 操作的便捷:处理流可能提供一系列便捷的方法来一次输入输出的大批量的数据,使用更加灵活方便。

3.字符代码案例

1.BufferedReader和BufferedWriter

注意:BufferedReader和BufferedWriter主要处理字符文件,千万别处理二进制文件,不然会乱码

        BufferedWriter bufferedWriter = null;
        try {
            //在节点流放true,就可以追加内容
            bufferedWriter = new BufferedWriter(new FileWriter("d:\\BufferedWriter.txt",true));
            bufferedWriter.write("你好吗水水水水水");
            bufferedWriter.newLine();//插入一个和系统相关的换行符
            bufferedWriter.write("工程师");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭外层流即可,传入的节点流会在底层关闭
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
   @Test
    public void copy(){

        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;

        String readL = null;
        try {
            bufferedReader = new BufferedReader(new FileReader("d:\\BufferedWriter.txt"));
            bufferedWriter = new BufferedWriter(new FileWriter("d:\\BufferedWriter2.txt"));
            //一行一行的读取
            while ((readL=bufferedReader.readLine())!=null){

                bufferedWriter.write(readL);
                bufferedWriter.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

4.字节代码案例

1.BufferedInputStream和BufferedOutputStream

  1. BufferedInputStream是字节流,在创建BufferedInputStream时,会创建一个内部缓冲区数组。
  2. BufferedOutputStream是字节流,实现缓冲的输出流,可以将过个字节写入底层输出流中,而不必对每次字节

2.代码案例

 @Test
    public void copy1(){

        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;

        try {
            int readLn = 0;
            byte[] bytes = new byte[1024];
            bufferedInputStream = new BufferedInputStream(new FileInputStream("d:\\Collection.png"));
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("d:\\Collection222.png"));
            while ((readLn=bufferedInputStream.read(bytes))!=-1){
                bufferedOutputStream.write(bytes,0,readLn);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {

                if(bufferedInputStream!=null){
                    bufferedInputStream.close();
                }
                if(bufferedOutputStream!=null){
                    bufferedOutputStream.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值