节点流和处理流(1)

基本介绍

  1. 节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter
  2. 处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter
    在这里插入图片描述
区别与联系
  1. 节点流是底层流/低级流,直接跟数据源相接
  2. 处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
  3. 处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连【模拟修饰器设计模式】

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

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

(个人理解)例子解释:Read.java是一个抽象类,里面有两个方法,一个读取文件的readFile(),一个读取字符串的readString(),分别通过FileRead.java和StringRead.java实现,这两个相当于节点流,现进行包装,通过BufferRead.java继承Read.java,在BufferRead.java中有一个属性read_,在BufferRead.java中可以将原来的方法封装起来,也可以扩展功能,这样的好处是,在实现时,只需要在包装流中传入想要实现的子类,就可以调用相应的方法,不需要直接跟数据源打交道,使用起来比较方便。(打工人与外包公司的关系,甲方(主类)找外包公司(包装流),外包公司接活儿让打工人(节点流)实现)

Read.java抽象类

package com.zj;

public abstract class  Read {
    public void readFile(){}
    public void readString(){}
    //也可以用一个方法管理,如用readMeathod()方法来实现所有的读操作,后面在调用时,利用对象动态绑定机制,绑定到对应的实现子类即可
    //public abstract void readMeathod();
}

FileRead.java实现readFile()(节点流)

package com.zj;

public class FileRead extends Read {
    public void readFile(){
        System.out.println("读取文件。。。");
    }
}

StringRead.java实现readString()(节点流)

package com.zj;

public class StringRead extends Read{
    public void readString(){
        System.out.println("读取字符串。。。");
    }
}

通过BufferRead.java包装(包装流/处理流)

package com.zj;

public class BufferRead extends Read{
    private Read read_;

    //接收Read的子类
    public BufferRead(Read read_) {
        this.read_ = read_;
    }
    public void readFile(){//封装一层
        read_.readFile();
    }
    //让方法更加灵活,多次读取文件
    public void readFiles(int num){
        for (int i=0;i<num;i++){
            read_.readFile();
        }
    }
    //扩展readString,批量处理字符串数据
    public void readStrings(int num){
        for (int i = 0; i< num; i++){
            read_.readString();
        }
    }
}

Test_.java方法调用

package com.zj;

public class Test_ {
    public static void main(String[] args) {
        BufferRead bufferRead1 = new BufferRead(new FileRead());//传入Read的子类FileRead
        bufferRead1.readFile();
        bufferRead1.readFiles(4);

        BufferRead bufferRead2 = new BufferRead(new StringRead());//传入Read的子类StringRead
        bufferRead2.readStrings(5);


    }
}

结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值