I/O流 && 装饰者模式

Input/Output

  1. 输入来源:文件、键盘、触摸屏、网络。。。
    输出目的:文件、屏幕、打印机、网络。。。

  2. 分类

    • 输入流/输出流
    • 字节流/字符流
    • 节点流/处理流
  3. 字节流
    • 核心类
      InputStream(abstract)<–FileInputStream
      OutputStream(abstract)<–FileOutputStream
    • 核心方法:
      InputStream:int read(byte [] b, int off, int len),返回值是读取数据的数量
      OutputStream:void write(byte [] b, int off, int len)
      //off = offside 读写偏移量
      //len = length 读写长度
  4. 字符流
    • 核心类
      Reader(abstract) <– FileReader
      Writer(abstract) <– FileWriter
    • 核心方法
      Reader:int read(char [] c, int off, int len)
      Writer:void write(char [] c, int off, int len)
  5. 装饰者模式
    e.g.
WorkerAWorkerBWorker
PlumberAPlumberBPlumber
CarpenterACarpenterBCarpenter

实现这种含有多维交叉属性的类,可以用装饰者模式

class AWorker implements Worker {
    private Worker worker;
    public AWorker(Worker worker) {
        this.worker = worker;
    }
    public void doSomeWork() {
        //AWorker特有功能的操作逻辑
        worker.doSomeWork(); 
    }
}

class Test {
    public static void main(String [] args) {
        Plumber plumber = new Plumber();
        AWorker aWorker = new AWorker(plumber);
        aWorker.doSomeWork(); 
    }
}

即实现了A公司的水管工的实现过程。

6.节点流/处理流
- 节点流:可以从或向一个特定的地方(节点)读写数据(如FileReader);
- 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写(如BufferedReader)。
处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

从装饰者模式的角度来看,
节点流就是被装饰者,如FileReader;
处理流就是装饰者,如BufferedReader。
装饰者是给被装饰者添加新的功能
即处理流就是给节点流增加新的功能
像BufferedReader其中就有个readLine()方法给了FileReader一行一行读取的功能,并把读取到的信息通过String类型返回回来,即public String readLine()

e.g.:

class Test {
      public static void main(String [] args) {
            FileReader fr = null;  
            BufferedReader br = null;
            try{
                  fr = new FileReader("e:/src/from.txt");
                  br = new BufferedReader(fr);
                  String line = null;
                  while(true) {
                        line = br.readLine();
                        if ( line == null) {
                              break;
                        }
                        System.out.println(line);
                  }

            }
            catch(IOException e){
                  e.printStackTrace();
            }
            finally{
                  try{
                        br.close();
                        //只需要关闭处理流BufferedReader而不用关闭节点流FileReader,因为关闭处理流时会自动关闭里面的节点流
                  }
                  catch(IOException e){
                        e.printStackTrace();
                  }
            }
      }
}
  • 常用节点流:
    • 文 件:FileInputStream、FileOutputStream、FileReader、FileWriter
    • 字符串:StringReader、StringWriter
    • 数 组:ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter
    • 管 道:PipedInputStream、PipedOutputStream、PipedReaderPipedWriter
    • 父 类:InputStream、OutputStream、Reader、Writer
  • 常用处理流:
    • 缓冲流:增加缓冲功能,避免频繁读写硬盘。
      BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
    • 转换流:实现字节流和字符流之间的转换。
      InputStreamReader、OutputStreamWriter
    • 数据流:提供将基础数据类型写入到文件中,或者读取出来。
      DataInputStream、DataOutputStream 等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值