功能简介


还记得前面说过的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. 【安全性测试】解决关于appscan基于登录会话检测失败问题

    有些问题久了忽然就想通怎么解决了,很神奇.这次要说的是,关于appscan无法检测到会话的问题,因为在百度上一直找不到相关的解决方法,这个问题困扰了我很久,今天终于找到方法解决了! 日常配置扫描内容: ...

  2. 通过命令行操作MYSQL的方法 以及导入大的SQL备份文件

    运行  输入CMD 进入 命令行窗口 输入Mysql.exe的路径  如:c:/wamp/bin/mysql.exe  回车 这时出现 welcome to the mysql ...的提示  进入成 ...

  3. margin相关属性值

    1.图片与文字对齐问题 图片与文字默认是居底对齐.一般img标签打头的小图标与文字对齐的话,通过 img{margin:0 3px -3px 0;} 这个的东西,能实现效果和兼容性俱佳的对齐效果: d ...

  4. 最好的前端API备忘单整理

    注:这份表引自The best front-end hacking cheatsheets - all in one place Javascript ES2015 Cheatsheet JavaSc ...

  5. 批量删除Excel里面的换行符

    关于批量删除excel里面的换行符,应该说写程序的遇上excel大体都会有这么个问题,在解决这个问题前,我的解决办法是把excel 的数据全部复制到txt里面, 因为操作txt比操作excel更为简单 ...

  6. 【技术分享】BurpSuite 代理设置的小技巧

    作者:三思之旅 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 在Web渗透测试过程中,BurpSuite是不可或缺的神器之一.BurpSuite的核心是 ...

  7. sublime No packages available for installation

    package control user-setting 中添加: "channels": [ "C:\\channel_v3.json" ], channel ...

  8. vue-router下的html5 history在iis服务器上的设置 vue去掉#

    转自:https://www.cnblogs.com/zzsdream/p/6576639.html 1.安装 url rewrite模块到IIS 下载地址 2.在web.config文件中 syst ...

  9. Java基础实训

  10. Ubunto使用 码云 创建项目

    1.安装 git sudo apt-get install git配置 git 文件 git config --global user.name "你的用户名" git confi ...