[二十二]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;

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值