I/O流 && 装饰者模式

来源:互联网 发布:淘宝专业产品拍摄教程 编辑:程序博客网 时间:2024/06/04 23:34

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.
Worker AWorker BWorker Plumber APlumber BPlumber Carpenter ACarpenter BCarpenter

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

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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 练完瑜伽颈椎疼怎么办 乳胶枕头太高了怎么办 枕头太高脖子痛怎么办 颈椎突出症状缓解后怎么办 外痔疼的的历害怎么办 小肚子疼得历害怎么办 练瑜伽伤到颈椎怎么办 鼻子干口干胃烧怎么办 颈椎病压迫神经引起手麻怎么办 4个月婴儿睡觉少怎么办 晚上睡觉睡不好老是醒来怎么办 吃了没熟的香蕉怎么办 70岁父母老吵架怎么办 怀孕七个月晚上睡不着怎么办 九个月宝宝睡眠不好怎么办 一个月的宝宝放不下怎么办 宝宝被吓了发烧怎么办 体内火气重睡不着觉怎么办 宝宝睡觉一直翻身发出声音怎么办 严重失眠怎么办整夜睡不着觉 腿疼得睡不着觉怎么办 19岁晚上睡不着该怎么办 工作累的想哭怎么办 心累迷茫想哭怎么办 白天很累晚上又睡不着怎么办 发型睡觉压乱了怎么办 通宵一夜第二天怎么办 夏天了腿脚还凉怎么办 咖啡色三天了月经还是下不来怎么办 睡觉姿势不对腰疼怎么办 来月经吃了香瓜怎么办 减肥期间晚上有饭局怎么办 减肥期间遇到晚上聚餐怎么办 婴儿脸不向上睡怎么办 睡觉压奶了疼怎么办 堵奶了挤不下来怎么办 孕36周胎儿腿短怎么办 孕晚期胎儿腿短怎么办 孕晚期宝宝腿短怎么办 手劳累过度麻痛怎么办 大人发烧40不退怎么办?