Java 日看一类(55)之IO包中的StringReader类

2026 最新实战教程:AI 重构开发全流程(从需求→上线→运维) 1)做什么系统2)技术栈3)功能模块4)部署要求plaintext我要做一个:待办事项(Todo)全栈应用技术栈:前端:React + TypeScript + Tailwind后端:Node.js + Express + MongoDB部署:Docker + 本地运行(后续可上云)功能:- 增删改查任务- 任务状态切换(完成/未完成)- 简单错误处理请按企业级标准生成:架构设计 + 全部代码 + 接口文档 + 启动命令。 阅读详情

该类的无引入包

继承自Reader类




该类的类头注释如下:

* A character stream whose source is a string.

大意如下:

读取对象是字符串的字符读入流




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

需要读取的字符串

private String str;

字符串长度

private int length;

读取位置偏移量

private int next = 0;

标记回溯点

private int mark = 0;



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

构造函数(传入需要读取的字符串

public StringReader(String s) {
    this.str = s;
    this.length = s.length();
}

确认流开启(确认目标字符串存在

private void ensureOpen() throws IOException {
    if (str == null)
        throw new IOException("Stream closed");
}

读取出字符串的单个字符(返回编码值

public int read() throws IOException {
    synchronized (lock) {
        ensureOpen();
        if (next >= length)//读取越界判定
            return -1;
        return str.charAt(next++);//读取完后修改指针
    }
}

读取出字符串中多个字符(写入传入的数组,返回实际读取值

public int read(char cbuf[], int off, int len) throws IOException {
    synchronized (lock) {
        ensureOpen();
        if ((off < 0) || (off > cbuf.length) || (len < 0) ||
            ((off + len) > cbuf.length) || ((off + len) < 0)) {//数组有效性检查
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return 0;
        }
        if (next >= length)
            return -1;
        int n = Math.min(length - next, len);//读取有效值
        str.getChars(next, next + n, cbuf, off);
        next += n;//修改读取指针
        return n;
    }
}

跳过字符串后多个字符读取(返回实际跳过值

public long skip(long ns) throws IOException {
    synchronized (lock) {
        ensureOpen();
        if (next >= length)
            return 0;
        // Bound skip by beginning and end of the source
        long n = Math.min(length - next, ns);
        n = Math.max(-next, n);
        next += n;
        return n;
    }
}

检测当前流是否有效(调用上述的ensureOpen方法

public boolean ready() throws IOException {
    synchronized (lock) {
    ensureOpen();
    return true;
    }
}

是否支持标记(都设置了标记变量肯定支持啊

public boolean markSupported() {
    return true;
}

标记当前位置(传入最大回滚距离

public void mark(int readAheadLimit) throws IOException {
    if (readAheadLimit < 0){
        throw new IllegalArgumentException("Read-ahead limit < 0");
    }
    synchronized (lock) {
        ensureOpen();
        mark = next;
    }
}

回滚到标记位置

public void reset() throws IOException {
    synchronized (lock) {
        ensureOpen();
        next = mark;
    }
}

关闭该读取流

public void close() {
    str = null;
}



该类十分简单,主要通过调用String类中的一些方法和自己设置的回滚操作来完成,对于学习字符读入流可以从该类开始,可以尝试自己来写一个类似的面向字符串的字符读取流。

2.ROS实用工具:坐标变换 本文围绕ROS坐标变换展开,介绍其在机器人系统中的关键作用,即统一不同传感器和执行器坐标系,服务数据融合等操作。基于ROS的tf库,从广播和监听TF变换两方面阐述实现过程,涵盖新建工作包、编写广播和监听代码、配置构建文件及编译等步骤。此外,介绍启动节点管理器后运行广播和监听节点的方法,并通过rqt_graph、rqt_tf_tree、tf_echo等工具可视化和获取坐标系变换信息。借助这些内容,读者不仅能掌握ROS坐标变换的实现,还能对机器人坐标变换系统的调试和理解有更深入认识 。 阅读详情

相关推荐

新手别怕!用‘东北天’和‘右前上’坐标系,5分钟搞懂惯性导航姿态矩阵(含Python验证代码)

本文通过‘东北天(ENU)’和‘右前上(RFU)’坐标系,详细解析惯性导航中的姿态矩阵概念。包含Python代码验证,帮助新手快速理解坐标变换、欧拉角及旋转矩阵的构建与应用,特别强调有限转动不可交换性与无限转动次序无关的区别。

weixin_29062255的博客 333

Java JsonParseException异常的解决

在开发工作过程中,有遇到以下异常的其实是参数异常,也就是json的拼装有问题。 在接口对接的时候,对方传过来的json解析报错: org.codehaus.jackson.JsonParseException: Unexpected character ('c' (code 99)): was expecting double-quote to start field name at [S...

我的博客 4万+

libiec61850实战:手把手教你用C语言动态获取IED设备模型(附完整代码解析)

本文详细介绍了如何使用libiec61850库通过C语言动态获取IED设备模型,包括环境配置、连接建立、模型遍历及错误处理等关键步骤。通过完整的代码示例和实战案例,帮助开发者掌握智能变电站通信中的核心技术,提升工业自动化系统的开发效率。

weixin_42519985的博客 435

Java IO StringReader和StringWriter

StringReader类用来将字符串转换成字符输入流。然后使用字符输入流提供的方式进行操作,也可以提供给其他高级字符输入流来使用。如可以将该字符输入流提供给BufferedReader输入流使用。StringWriter:在内存中缓存读取到的所有字符串,然后使用通过toString方法一次性全部输出字符串。package com.louisgeek.appupdatetool;import jav

Keep Learning , Keep Improving ! 3312

【软件介绍】RVC本地部署使用方法

【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。

心动的那一刻,记忆便盛开了花 2986

python机器人编程——用python实现一个写字机器人

本篇我们构建一个可以跟人一样写字的机器人python软件。实现如下功能:打开一个写字板,人类在屏幕上写或画出任意形状,机器人同步在纸面上画出和人类一样的形状,就好像人类在远程操控机械臂,又或是机械臂是人的另一只手。这个软件是可以扩展的,如果连上互联网,可以实现人在北京写了一行字,在上海的机器臂同时也在自己的本子上写了一行字。

JAMES费的空间 7995

java 将字符串转化成输入流_如何将字符串转换成Java中的输入流读取器?

如何将String值转换为InputStreamReader?BytearrayInputstream还可以实现以下功能:InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );您可能希望继承平台的默认字符集。谢谢。完成。检测平台默认字符集的最佳方法是什么?charset.defaultcharset…或者...

weixin_34331737的博客 1309

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

java IO笔记(StringReader/StringWriter)

本篇将要讲述的是java io包中的StringReader和StringWriter。这两个类都是Reader和Writer的装饰类,使它们拥有了对String类型数据进行操作的能力。下面还是先附上源码,然后对其进行简单的分析:StringReader:package java.io; public class StringReader extends Reader { //内置了...

moonfish0607的博客 1万+

【RT-DETR涨点改进】全网独家首发Conv改进篇 | SCI一区 2025 | RT-DETR引入轻量级CGHalfConv通道分组半卷积模块,含多种创新改进、有效提升检测精度

本文介绍引入 GC Half-convolution 模块可以显著提升 RT-DETR 在资源受限环境下的性能。该模块通过通道分组与半卷积结合,有效减少了参数量与计算量,增强了模型对不同尺度和复杂背景下目标的特征提取能力。在保持模型轻量化的同时,GC Half-convolution 能够更细致地区分目标的边缘纹理、颜色、结构等关键信息,从而提升检测精度。特别是在面对小目标、多类别、形态相近的目标时,该模块能提取更具判别性的局部与全局特征,优化 RT-DETR 的检测效果,并加快推理速度。

Ai缝合怪、助力小伙伴高效发论文 747

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

java之StringReader类

1 java中有一个类是可以讲string转化为字符串流的,就是StringReader。该类是将字符串转化为字符串流。 如:String xmlString="aaa";    SAXReader saxReader=new SAXReader();    Document document=saxReader.read(new StringReader(xmlString));

xclsky的博客 4009

HandwrittenMathFormulaRecognition:基于YOLOv8的手写数学公式识别系统

输入:包含手写数学公式的图像(拍摄的板书、作业纸等)输出:对应的数字文本形式的数学公式(如LaTeX格式或文本表达式)标准的手写数学表达式数据集,包含在线轨迹及图片,广泛用于公式识别研究。包含近10万对公式图片及对应的LaTeX标注,适合训练公式识别模型。MathBrush公开手写数学公式图像数据集,含多种书写风格。手写数字与符号数据集(MNIST及其扩展)用于基础数学符号的训练。

YOLO 283

io流读取word文件 乱码_高效IO之Java IO体系(一)

更多Android高级架构进阶视频免费学习请点击:哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili​space.bilibili.com个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 )** 基于...

weixin_39824801的博客 1444

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IO包中的其他类

查看各对象API文档 打印流 PrintWriter PrintStream 序列流:对多个流进行排列合并 SequenceInputStream 1 public static void main(String[] args) throws IOException { 2 3 4 /* 5 * 需求:将...

weixin_30869099的博客 60

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

高效IO之Java IO体系(一)

更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。 借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 ) ** 基于字...

AndroidAlvin的博客 297

NTscan扫描工具

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

java.io包下常用类及常用方法介绍

JAVA基础知识之IO——Java IO体系及常用类 Java IO体系 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。 借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 )  基于字节的IO操作        基于字符的IO操作 ...

yimenglin的博客 841

JAVA基础知识之IO——Java IO体系及常用类

Java IO体系个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 ) 基于字节的IO操作    基于字符的IO操作     从上图可以看到,整个Java IO体系都是基于字符流(InputStream/...

提莫队长的博客 209

java oracle clob string 大字符串存储【转】

单位用到了oracle存储string类型到数据库里的clob,上网查看资料找到解决方案。如下: 1 public class ClobTest { 2 3 static String url = "jdbc:oracle:thin:@10.12.10.18:1521:orcl"; 4 static String u...

weixin_30768661的博客 558

Dom解析

1 /**功能说明 报文解析 2 * @param 3 * @author 4 * @since 5 */ 6 package com.mall.common; 7 8 import java.io.IOException; 9 import java.io.StringReader; 10 import java.util.List; 1...

weixin_30456039的博客 71

JaxbUtil转json转XML工具类

json转换为XML工具类 1 package com.cxf.value; 2 3 import org.springframework.util.StringUtils; 4 5 import javax.xml.bind.*; 6 import java.io.ByteArrayOutputStream; 7 import java.io.IOExcept...

weixin_30906701的博客 236

XML格式化及解析

XML格式化工具:notepad++ 下载地址http://rj.baidu.com/soft/detail/13478.html?ald 一个教程地址:http://jingyan.baidu.com/album/4b07be3c69172648b380f383.html 一个很好的notepad教程地址:http://www.crifan.com/files/doc/doc...

weixin_30690833的博客 85

关于把JSP新闻内容(String)存入数据库的CLob字段

首先说明情况:我的News实体类里面的newsContent是String类型的,用富文本编辑器编辑以后要存入数据库的Clob字段中 代码进行了简单的分层,JdbcUtil全部代码贴在了最下面。 Dao的实现类(部分): 1 public void update(News news) { 2 String sql = "update NEWS set NEWS_TITLE = ...

weixin_30287169的博客 143

Cortex-M0在汽车电子中的功能安全核心价值

ARM Cortex-M0是一种面向嵌入式实时控制的32位微控制器内核,基于ARMv6-M架构,以确定性执行、低复杂度和高可验证性著称。其无缓存、无分支预测、三级流水线等设计,天然满足ISO 26262功能安全标准对ASIL-B/D等级的硬性要求,尤其在单点故障度量(SPFM)和中断响应抖动控制方面具备不可替代优势。作为车身控制模块(BCM)、电源监控、LIN网关等关键ECU的核心,M0承担着可信启动、故障注入测试、安全岛隔离等高可靠性任务。相比高性能内核,它不拼算力,而以极小面积(0.23mm²)、超低F

weixin_33802505的博客 330

JAVA基础知识之StringReader流

一、StringReader流定义     API说明:字符串输入流、其本质就是字符串 二、StringReader的实例域 //流对象 private String str; //流的长度 private int length; //流的当前位置,下个字符的索引 private int next = 0; ...

咕噜是个胖子 1万+

JAVA IO 包源码剖析(一) StringReader解析

该类为一个字符流,soure是String,即从一个String字符串读取字符。该类继承自Reader. 其实例变量有: private String str; //存储字符串 private int length; //存储字符串的长度 private int next = 0; //存储下一次读取的字符起始位置 private int mark =

bayern39的博客 1110
上一篇: Java 日看一类(54)之IO包中的Serializable接口
下一篇: Java 日看一类(56)之IO包中的StringWriter类
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值