[二十]JavaIO之StringReader 与 StringWriter
标签: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
评论