[二十]JavaIO之StringReader 与 StringWriter

2021-06-30 14:06

阅读:470

标签:line   aci   指定   flush   位置   png   字符串长度   string   方法   

功能简介


还记得前面说过的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

标签:line   aci   指定   flush   位置   png   字符串长度   string   方法   

原文地址:https://www.cnblogs.com/noteless/p/9641567.html


评论


亲,登录后才可以留言!