功能简介


还记得前面说过的CharArrayReader 和 CharArrayWriter吗?
CharArray 是数据源
CharArrayReader 是读,  从一个CharArray 中读取,所以需要一个CharArray,通过构造方法传递
CharArrayWriter  是写, 写入到一个CharArray中去,所以它内部提供了一个CharArray 用来保存数据

StringReader 和 StringWriter 也是类似的道理
String作为数据源
StringReader 是读, 从一个String中读取,所以需要一个String ,通过构造方法传递
StringWriter是写, 写入到一个String中去,所以它内部提供了一个StringBuffer中用来保存数据

构造方法


StringReader只有一个版本的构造方法,接受一个String作为参数

String str指向这个字符串
length 为字符串长度
next为读取元素的下标索引
mark为标记点

StringWriter内部有两个版本的构造方法
在构造方法内部初始化了内部的buf  创建了一个StringBuffer
一个指定大小  一个不指定

其他方法


StringReader


read方法

提供了两个版本的read
public int read() throws IOException    读取一个字符
public int read(char cbuf[], int off, int len) throws IOException  读取len个数的字符到指定的字符数组cbuf[]  ,保存到指定位置off

可以看得出来,底子还是依赖StringBuffer本身

标记相关
StringReader操作的是内存数据String
所以标记相关的三个方法是轻松支持的
使用mark记录标记点

ready
常规的ready
只有一个版本构造方法,只要合法构造了
那么数据源String就存在
那么就是可用

skip
跳过流中指定数量的字符 返回跳过的字符数 

此处 ns 参数可能为负数,虽然 Reader 超类的 skip 方法在此情况下会抛出一个异常
ns 为负值导致此流向后跳读  负返回值指示向后跳读   向后跳读不可能倒过字符串的开头
如果读取或跳读了整个字符串,则此方法无效且始终返回 0
了解到他可以为负数,而且返回值也可能是负数

close
close方法仅仅是置空

StringWriter


write照例提供了 write  append方法
以及flush 方法 和 close方法
另外
因为内部的StringBuffer 它还提供了一个toString方法

不熟悉StringBuffer的, 可以先过去了解一下StringBuffer 

提供了四个版本的write方法
void write(char[] cbuf, int off, int len)
          写入字符数组的某一部分。
void write(int c)
          写入单个字符。
void write(String str)
          写入一个字符串。
void write(String str, int off, int len)
          写入字符串的某一部分

既然内不是StringBuffer,自然少不了调用StringBuffer的方法
四个write方法全部都是如此
调用了StringBuffer的append 方法

比如

三个版本的append方法
public StringWriter append(char c)
public StringWriter append(CharSequence csq)
public StringWriter append(CharSequence csq, int start, int end)
这三个方法本身没什么好说的
需要注意下的就是,它内部使用的是write



写入StringBuffer,没什么需要刷新的,不涉及缓存
另外
这个不涉及系统资源,所以关闭一个StringWriter没有什么影响
此类中的方法在关闭该流后仍可被调用,而不会产生任何 IOException
而且继续正常使用  要理解本质,人家底层就是一个StringBuffer
关闭后照样可以使用

toString


总结


StringReader 和StringWriter 本身也没什么特别的,跟CharArrayReader 和 CharArrayWriter 非常的类似
也仅仅是一种数据源的形式而已

只需要记住本文开始说到的原理
String作为数据源
StringReader 是读, 从一个String中读取,所以需要一个String ,通过构造方法传递
StringWriter是写, 写入到一个String中去,所以它内部提供了一个StringBuffer中用来保存数据

以及他们的构造方法即可
其他的方法遵循Reader 或者Writer的家族协议


[二十]JavaIO之StringReader 与 StringWriter的更多相关文章

  1. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  2. WCF学习之旅—TcpTrace工具(二十六)

    止文(WCF学习之旅—TcpTrace工具(二十五))介绍了关于TcpTrance的一种使用方式,接下来介绍第二种使用方式. 三.通过ListenUri实现基于tcpTracer的消息路由 对于路由的 ...

  3. WCF学习之旅—实现支持REST客户端应用(二十四)

    WCF学习之旅—实现REST服务(二十二) WCF学习之旅—实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...

  4. geotrellis使用(二十五)将Geotrellis移植到spark2.0

    目录 前言 升级spark到2.0 将geotrellis最新版部署到spark2.0(CDH) 总结 一.前言        事情总是变化这么快,前面刚写了一篇博客介绍如何将geotrellis移植 ...

  5. geotrellis使用(二十二)实时获取点状目标对应的栅格数据值

    目录 前言 实现方法 总结 一.前言        其实这个功能之前已经实现,今天将其采用1.0版的方式进行了重构与完善,现将该内容进行总结.        其实这个功能很常见,比如google地球上 ...

  6. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  7. 二十五、JDK1.5新特性---枚举

    与上篇文章介绍的相同,本文也是介绍jdk 1.5出现的新特性,本文将介绍枚举的相关用法. 在jdk 1.5 之前.Java可以有两种方式定义新类型:类和接口.对于大部分面向对象来说.这两种方法看起来似 ...

  8. [分享] IT天空的二十二条军规

    Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...

  9. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

随机推荐

  1. VB用API模拟截屏键PrintScreen

    很多人用 SendKeys "{PRTSC}" 模拟截屏键 PrintScreen 的时候提示<错误:'70' 拒绝的权限>,于是经常遇到人问...干脆写下来 '声明 ...

  2. vs2012开发基于MFC的ActiveX控件

    1.新建工程 2.一直点击下一步,直到出现一下界面,注意红色标注选项,点击完成. 3.进入工程的属性界面,设置工程属性 4.添加对话框资源及其他控件,添加对话框类, 5.设置对话框属性 6.设置Dia ...

  3. echarts-for-react 从新渲染数据

    <ReactEcharts option={option} notMerge={true}  style={{height: '600px', width: '100%'}} className ...

  4. VS2017中的nuget还原失败或超时的解决方案

    把nuget源地址修改为

  5. vue项目中引入mint-ui的方式(全部引入与按需引入)

    参考哦 https://blog.csdn.net/qq_36742720/article/details/83620584 https://jingyan.baidu.com/article/c1a ...

  6. angular.js学习笔记(二)

    1.安装core ,shared模块 ng g m core  ng g m shared 2.在shared中导入core模块   core模块只加载一次所以将公共组件放到core中 3.创建公共组 ...

  7. 基于 TensorFlow 在手机端实现文档检测

    作者:冯牮 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上运行一个神经网络的关键技术点 在卷积神经网络适用的领域里,已经出现了一些很经典的图像分类网络,比 ...

  8. 《Android插件化开发指南》勘误

    一些常识: 1)全书70个代码例子中,涉及到插件的例子,请先assemble插件的项目,这会在HostApp项目中生成assets目录,并在该目录下plugin1.apk.这样,HostApp才能正常 ...

  9. 实战深度学习OpenCV(一):canny边缘检测

    利用canny边缘检测,我们可以很好地得到哦一个图像的轮廓,下面是基于C++的,这是我们通过这段代码得到的结果: #include "pch.h" #include <ios ...

  10. 【安富莱】【RL-TCPnet网络教程】第11章 RL-TCPnet调试方法

    第11章      RL-TCPnet调试方法 本章节为大家讲解RL-TCPnet的调试方法,RL-TCPnet的调试功能其实就是通过串口打印实时监控运行状态.而且RL-TCPnet的调试设置比较简单 ...