请选择 进入手机版 | 继续访问电脑版

[IO] JavaIO之LineNumberReader(二十三)

编程语言 编程语言 1660 人阅读 | 0 人回复

功能介绍

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

跟踪行号的缓冲字符输入流 此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号

默认情况下,行编号从 0 开始 该行号随数据读取在每个 行结束符 处递增,并且可以通过调用 setLineNumber(int) 更改行号

本文作者:程序员潇然 疯狂的字节X https://crazybytex.com/ 但是,setLineNumber(int) 不会实际更改流中的当前位置; 它只更改将由 getLineNumber() 返回的值

有的朋友可能觉得,这也叫装饰器模式么? 还是那句话

设计模式是作为解决问题或者设计类层级结构时的一种思维的存在,而不是公式一样的存在!

image.png

构造方法

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

其他方法

read以及readLine方法

仔细看下两个版本的read方法 以及 readLine方法 他们都是super.XXX 然后在此基础上提供了行号的功能

//读取单个字符
int read();

//将字符读入数组中的某一部分
int read(char[] cbuf, int off, int len);

//读取文本行
readLine();

image.png

标记

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

skip

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

总结

LineNumberReader本身并没有太多的东西,他是BufferedReader的子类 他的逻辑意义,非常典型简单的装饰器模式

是你还有你,一切拜托你

然后自己增加了点小功能

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

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

common_log.png 转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-159-1-1.html

关注下面的标签,发现更多相似文章

文章被以下专栏收录:

    黄小斜学Java

    疯狂的字节X

  • 目前专注于分享Java领域干货,公众号同步更新。原创以及收集整理,把最好的留下。
    包括但不限于JVM、计算机科学、算法、数据库、分布式、Spring全家桶、微服务、高并发、Docker容器、ELK、大数据等相关知识,一起进步,一起成长。
热门推荐
[若依]微服务springcloud版新建增添加一个
[md]若依框架是一个比较出名的后台管理系统,有多个不同版本。
[CXX1300] CMake '3.18.1' was not
[md][CXX1300] CMake '3.18.1' was not found in SDK, PATH, or
java 解析modbus 协议 Modbus4j应用 使用mo
[md]本文记录使用java开发modbus协议程序,与串口进行连接,使用