Java 日看一类 (33)之IO包中的LineNumberReader类

Sigrity Power DC Resitance Network Model Generation模式生成电阻SPICE模型操作指导 Sigrity Power DC Resitance Network Model Generation模式是用于提取负载每个pin电阻SPICE模型的,结果以spice网表形式展现,仍然以Motherboard.spd为例进行说明。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。P/F Mode:通过/失败模式,选择Worst,最差的情况。 阅读详情

该类无引入包

继承自BufferedReader类



类头注释如下:

/**
 * A buffered character-input stream that keeps track of line numbers.  This
 * class defines methods {@link #setLineNumber(int)} and {@link
 * #getLineNumber()} for setting and getting the current line number
 * respectively.
 *
 * <p> By default, line numbering begins at 0. This number increments at every
 * <a href="#lt">line terminator</a> as the data is read, and can be changed
 * with a call to <tt>setLineNumber(int)</tt>.  Note however, that
 * <tt>setLineNumber(int)</tt> does not actually change the current position in
 * the stream; it only changes the value that will be returned by
 * <tt>getLineNumber()</tt>.
 *
 * <p> A line is considered to be <a name="lt">terminated</a> by any one of a
 * line feed ('\n'), a carriage return ('\r'), or a carriage return followed
 * immediately by a linefeed.
 *
 * @author      Mark Reinhold
 * @since       JDK1.1
 */

大意如下:

该类是可记录行号的缓冲字符输出流

该类声明了方法setLineNumber()和getLineNumber()来设置和获得当前的行号

默认情况下,行号从0开始

行号随数据中行结束符的读取而增加,也可以被setLineNumber()方法修改

注意,无论如何setLineNumber都不会修改流中的当前读取标识位,仅仅改变getLineNumber的返回值

一行可以认为在遇到以下符号结束,换行符'\n',回车符'\r',或者是回车后紧跟换行符



该类含有如下的成员变量:

当前的行计数值:

private int lineNumber = 0;

被标记的行计数值:

private int markedLineNumber;

跳过下个换行符标志位:(必须是下个字符恰好为换行符

private boolean skipLF;

标记点的跳过换行符标志位状态

private boolean markedSkipLF;

最大缓冲区

private static final int maxSkipBufferSize = 8192;

跳过值的缓冲区数组(垃圾场)

private char skipBuffer[] = null;


该类含有如下的成员方法:

构造函数(给一个reader加上行计数功能

public LineNumberReader(Reader in) {
    super(in);
}

构造函数(设立缓冲区大小

public LineNumberReader(Reader in, int sz) {
    super(in, sz);
}

设置当前行计数值

public void setLineNumber(int lineNumber) {
    this.lineNumber = lineNumber;
}

获得行计数值

public int getLineNumber() {
    return lineNumber;
}

覆写的read(),读取单个字符(加了行计数功能

public int read() throws IOException {
    synchronized (lock) {
        int c = super.read();
        if (skipLF) {//如果需要跳过下个换行符
            if (c == '\n')
                c = super.read();//继续读取
            skipLF = false;
        }
        switch (c) {
        case '\r':
            skipLF = true;//若为回车符就跳过下个换行符,同时++行数
        case '\n':          /* Fall through */
            lineNumber++;
            return '\n';//直接返回换行符
        }
        return c;
    }
}

覆写的read(char[],int,int),将字符读取入传入的数组特定位置

public int read(char cbuf[], int off, int len) throws IOException {
    synchronized (lock) {
        int n = super.read(cbuf, off, len);//n为实际读取数

        for (int i = off; i < off + n; i++) {//遍历读取入的数组
            int c = cbuf[i];
            if (skipLF) {
                skipLF = false;
                if (c == '\n')//直接跳过下面选择继续读取计数
                    continue;
            }
            switch (c) {
            case '\r':
                skipLF = true;
            case '\n':      /* Fall through */
                lineNumber++;
                break;
            }
        }

        return n;
    }
}

覆写readLine(),读取一行数据

public String readLine() throws IOException {
    synchronized (lock) {
        String l = super.readLine(skipLF);//读取的一行数据,如果有跳过换行符实际读取是两行数据
        skipLF = false;
        if (l != null)
            lineNumber++;
        return l;
    }
}

跳过后续的数个字符进行读取

public long skip(long n) throws IOException {
    if (n < 0)
        throw new IllegalArgumentException("skip() value is negative");
    int nn = (int) Math.min(n, maxSkipBufferSize);//取较小值然后把需跳过数据读入到“垃圾场”中;
    synchronized (lock) {
        if ((skipBuffer == null) || (skipBuffer.length < nn))
            skipBuffer = new char[nn];//缓冲区初始化
        long r = n;
        while (r > 0) {
            int nc = read(skipBuffer, 0, (int) Math.min(r, nn));//重复向“垃圾场”中丢弃跳过数据
            if (nc == -1)//读取完毕
                break;
            r -= nc;//还需丢弃的垃圾数
        }
        return n - r;//返回实际跳过数据
    }
}

覆写标记点操作,标记当前读入位置

public void mark(int readAheadLimit) throws IOException {
    synchronized (lock) {
        super.mark(readAheadLimit);//最大回溯距离
        markedLineNumber = lineNumber;
        markedSkipLF     = skipLF;
    }
}

回滚操作(读取指针回归到标记位置,各种标志位也回归当时状态

public void reset() throws IOException {
    synchronized (lock) {
        super.reset();
        lineNumber = markedLineNumber;
        skipLF     = markedSkipLF;
    }
}



该类相当于是对BufferedReader类做了一个小升级,采用的是继承的方式来向BufferedReader类添加行计数功能。至于这里为什么不采用组合而使用继承的方式来进行功能添加,在我看来是为了提高代码复用性,同时也由于该类的继承关系不会大量修改才会使用继承关系来添加功能。

在 SAP S/4HANA 的 BP 事务里做保存前校验:BDT 事件、BUPA_FURTHER_CHECKS 与 CVI 扩展 BAdI 一次讲透 SAP BP事务保存前校验机制解析 摘要:本文系统梳理了SAP BP事务保存前的校验机制,揭示了三种关键校验点的差异与适用场景: BDT框架DCHCK事件:最靠近UI层,适合屏幕字段级校验,但API调用时可能失效 Classic BAdI BUPA_FURTHER_CHECKS:全局拦截点,可阻断整个BP保存,适合核心业务规则 CVI扩展校验:仅管控供应商/客户段落,需注意可能产生"BP已保存但段落未保存"的情况 文章通过真实案例(如黑名单校验、付款冻结等)展示了各校验点的最佳实践,并特 阅读详情

相关推荐

win10 离线安装.Net Framework3.5

起因,安装软件比如3dmax2014等需要.Net Framework3.5支撑,那么需要安装低版本的.Net Framework3.5 闲话少说。 1.下载 NetFx3.cab 链接: https://pan.baidu.com/s/124to7F3BOy4yAlY61OjbDg 提取码: kixu 2.将NetFx3.cab 放入 系统盘的windows目录下(示例 C:\Wi...

m0_37615458的博客 7728

Java LineNumberReader mark()方法与示例

LineNumberReader类mark()方法 (LineNumberReader Class mark() method) mark() method is available in java.io package. mark()方法在java.io包中可用。 mark() method is used to set the current position in this LineNum...

cumudi0723的博客 360

CSV文件输入到simulink中

将示波器波形和数据CSV文件保存下来进行数据分析。将波形绘制到simulink中

yay0923的博客 5327

Java LineNumberReader skip()方法与示例

LineNumberReader类skip()方法 (LineNumberReader Class skip() method) skip() method is available in java.io package. skip()方法在java.io包中可用。 skip() method is used to skip the given number of characters from...

1807

Qt5.15.2安卓开发环境配置保姆级教程(含JDK8、SDK33、NDK21.4及Gradle国内镜像避坑指南)

本文提供Qt5.15.2安卓开发环境配置的完整教程,涵盖JDK8、SDK33、NDK21.4及Gradle国内镜像设置,帮助开发者快速搭建开发环境并避免常见问题。通过详细步骤和实战技巧,解决依赖冲突、网络超时等难题,提升开发效率。

weixin_28730353的博客 204

PPO算法详解:基于CartPole-v1的强化学习实现

PPO算法详解:基于CartPole-v1的强化学习实现

m0_54720701的博客 866

java.io.LineNumberReader类介绍

是 Java 中一个用于读取文本行并记录行号的字符输入流类。它是java.io包的一部分,并且继承自。提供了一种方便的方法来读取输入流中的行,同时自动记录每一行的行号。BufferedWriter 的缓冲机制使得读取操作更加高效,尤其是在处理大型文本文件时。

qq_27390023的博客 431

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

(每日持续更新)jdk api之LineNumberReader基础、应用、实战

记录当前行号。返回当前行号。设置当前行号。int read()读取下一个字符的数据。读取字符到字符数组中。读取一行文本。跳过指定数量的字符。标记当前位置。重置到最后一次调用mark方法的位置。关闭输入流。

a89879193的专栏 1353

金蝶ERP升级华为MetaERP策略

摘要:金蝶ERP向华为MetaERP的迁移是战略级业务重构项目,需采用"替换实施"而非简单升级。实施分为三阶段:战略规划评估(3-6个月)、系统实施数据迁移(6-18个月)、切换上线运营支持。关键策略包括业务驱动、流程优化结合系统替换、重视数据治理、选择强有力合作伙伴、分阶段实施以及加强培训变革管理。华为MetaERP具备全栈自主、云原生高性能、集成优秀实践等优势。成功要素在于明确战略、高层支持、业务深度参与、数据质量把控及科学项目管理。

金牌架构师 595

华为OD机试真题 新系统2026-04-01 Python&JS 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 1316

LineNumberReader的简单介绍与使用

LineNumberReader这个类,继承于BufferedReader类。 相比于BufferedReader类,LineNumberReader这个类多了跟踪行号的功能,它定义了setLineNumber(int)和getLineNumber()方法,分别起到设置行号和获取行号的作用。默认情况下,行编号从0开始,所以一开始获取行号,就是0了,每当换行一次,就会+1,这样来记录行号的。比如,我们调用了setLineNumber(int)方法,那么文件指针会跳转到指定的行吗?答案是:不会!因为,它只是起

ApolloNing的博客 6586

1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务

本文基于 SAP Cloud Application Programming 编程模型的 OData 服务开发教程的第一步,简述了 SAP Business Technology Platform 里 Business Application Studio 开发工具的打开方式,创建 Dev Space 以及 CAP 项目的创建步骤,以及如何通过 schema.cds 和 service.cds 分别创建 OData 模型和 OData 服务,最后通过 ports preview 打开 OData 服务预览页

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1803

LineNumberReader

LineNumberReader LineNumberReader是一个可以获得和设置行好的缓冲字符输入流。 LineNumberReader继承自BufferedReader。 构造方法:LineNumberReader(Reader in) 使用默认输入缓冲区的大小创建新的行编号。 它有两个特殊的方法: public int getLineNumber() :获得当前行号。 public void setLineNumber(int lineNumber) :设置当前行

m0_46484836的博客 2433

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java I O类大全_java I/O系统 LineNumberReader类

LineNumbeReader类可以很方便的读取文件的行号package ch13;import java.io.*;import io.BufferedInputFile;public class BasicFileOutput {static String file = "src/ch13/Writer.java";public static void main(String[] args)t...

weixin_33724264的博客 73

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JAVA——LineNumberReader

import java.io.*; class LineNumberReaderDemo { public static void main(String[] args)throws IOException { FileReader fr = new FileReader("FileWriterDemo.java"); LineNumberReader

Jungle_hello的博客 725

视频教程-Java IO流精讲下-Java

Java IO流精讲下 曾任职于国内知名校企合作单位、超过6年教育行业工作经...

weixin_33908232的博客 506

利用LineNumberReader来查看一个文件——《Thinking in Java》随笔030

1 //: TestLineNumber.java 2 package c10; 3 4 import java.io.FileInputStream; 5 import java.io.InputStreamReader; 6 import java.io.LineNumberReader; 7 8 /** 9 * @time: 上...

weixin_30279751的博客 109

java 怎么读出txt中的值_自学JAVA每日记录(33)-欢迎指点欢迎共勉

接上一篇二、JavaIO流精讲下 LineNumberReader 数据输入输出流 内存操作流 打印流 标准输入输出流 随机访问流 合并流 序列化流和反序列化流 Properties(集合+IO流) 1、LineNumberReader:是一个可以获得和设置行号的缓冲字符输入流;继承自BuffereReader。 构造方法:LineNumberReader(Reader in) 使用默认输入...

weixin_42550052的博客 104

IO流02--毕向东JAVA基础教程视频学习笔记

提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-read和write的特点15 读取键盘录入     08 自定义装饰类 1 /*自定义装饰设计类*/ 2 import java.io.*; 3 class MyBufferedR

Brighten的的博客 1138

IO流基础

  IO流,也称为数据流,用于处理设备之间的数据传输。  JAVA对数据的操作就是通过流的方式,而流分为两种:字符流,字节流 字符流:   可以内部制定码表,处理文字很方便,字符流里的基类是Reader,Writer 字节流:   操作字节数据。和字符流差不多,基类是InputSteram,OutputStream,如果不使用缓冲区,不需要flush()方法,查看父类方法,使用子类建立对象...

weixin_30672295的博客 63

黑马程序员------IO(二)

------- android培训、java培训、期待与您交流! ---------- 黑马程序员------IO(二) 1.1 字符流的缓冲区缓冲区的出现提高了对数据的读写效率对应类:BUfferWriterBufferedReader特点:缓冲区要结合流才可以使用,在创建缓冲区之前,必须要有流对象。在流的基础上对流的功能进行了增强。BUfferWriter步骤:1.创建一个字符写入流对象F...

weixin_30778805的博客 115

Java学习:I/O流(2)

LineNumberReader 跟踪行号的缓冲字符输入流,父类为BufferedReader。 成员方法: getLineNumber() 获得当前行号。 setLineNumber(intlineNumber) 设置当前行号。 练习代码如下: 1 //创建LineNumberReader对象 2 /...

weixin_30252155的博客 78

IO流之字符流知识总结

IO流之字符流知识总结 字符流:读写字符的 顶级父类是Reader和Writer 操作流程 在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下: 使用File类打开一个文件 通过字节流或字符流的子类,指定输出的位置 ...

zangjunlang4288的博客 158
上一篇: Java 日看一类(32)之IO包中的IOException类
下一篇: Java 日看一类(34)之IO包中的NotActiveException和NotSerializableException
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值