zoukankan      html  css  js  c++  java
  • [二十二]JavaIO之LineNumberReader


    功能介绍


    LineNumberReader是提供了行号的具体的装饰器类

    跟踪行号的缓冲字符输入流
    此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号
    默认情况下,行编号从 0 开始
    该行号随数据读取在每个 行结束符 处递增,并且可以通过调用 setLineNumber(int) 更改行号
    但是,setLineNumber(int) 不会实际更改流中的当前位置;
    它只更改将由 getLineNumber() 返回的值


    有的朋友可能觉得,这也叫装饰器模式么?
    还是那句话
    设计模式是作为解决问题或者设计类层级结构时的一种思维的存在,而不是公式一样的存在!


    image_5b9a564e_6234

    构造方法


    LineNumberReader 继承了BufferedReader
    构造方法跟BufferedReader 一样
    内部也是直接
    super
    image_5b9a564e_23d1

    其他方法


    read以及readLine方法

    仔细看下两个版本的read方法  以及 readLine方法
    他们都是
    super.XXX
    然后在此基础上提供了行号的功能
    int read()
              读取单个字符
    int read(char[] cbuf, int off, int len)
              将字符读入数组中的某一部分
    readLine()
              读取文本行
    image_5b9a564e_690



    BufferedReader是支持标记
    所以LineNumberReader也是自动支持了
    内部借助的也是super.XXX
    image_5b9a564e_8be

    也例行提供了skip
    里面的read 是super.read.....
    image_5b9a564e_5f60


    总结

    LineNumberReader本身并没有太多的东西,他是BufferedReader的子类
    他的逻辑意义,非常典型简单的装饰器模式
    是你还有你,一切拜托你,然后自己增加了点小功能

    构造调用父类构造方法,里面的方法也都是借助于super.XXX
    只不过增加了行号的功能

    一定要记住,setLineNumber(int) 并不会改变流
    只是改变内部的那个    private int lineNumber = 0;



  • 相关阅读:
    我还没死!!微信公众号——自媒体的营销之路
    网页中嵌入视频
    保存对象到文件中
    bash array
    正则表达式如何验证邮箱
    software testing
    Verification and validation
    bash array
    12 Linux Which Command, Whatis Command, Whereis Command Examples
    如何进行产品路标规划和项目排序?
  • 原文地址:https://www.cnblogs.com/noteless/p/9642904.html
Copyright © 2011-2022 走看看