[二十]JavaIO之StringReader 与 StringWriter

功能简介

 

还记得前面说过的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
一个指定大小  一个不指定
image_5b9a23fa_382f

 

其他方法

 

StringReader

 

read方法

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

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

 

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

 

ready

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

 

skip

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

 

此处 ns 参数可能为负数,虽然 Reader 超类的 skip 方法在此情况下会抛出一个异常

ns 为负值导致此流向后跳读  负返回值指示向后跳读   向后跳读不可能倒过字符串的开头

如果读取或跳读了整个字符串,则此方法无效且始终返回 0

了解到他可以为负数,而且返回值也可能是负数

 

close

close方法仅仅是置空
image_5b9a23fa_b5b

 

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 方法

比如
image_5b9a23fa_7b2

 

三个版本的append方法
public StringWriter append(char c)
public StringWriter append(CharSequence csq)
public StringWriter append(CharSequence csq, int start, int end)

这三个方法本身没什么好说的
需要注意下的就是,它内部使用的是write
image_5b9a23fa_7068

 

 

 

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

image_5b9a23fa_7046 关闭后照样可以使用
image_5b9a23fa_91d

 

toString

image_5b9a23fa_61ee

 

 

总结

 

StringReader 和StringWriter 本身也没什么特别的,跟CharArrayReader 和 CharArrayWriter 非常的类似

也仅仅是一种数据源的形式而已

 

只需要记住本文开始说到的原理

String作为数据源

StringReader 是读, 从一个String中读取,所以需要一个String ,通过构造方法传递

StringWriter是写, 写入到一个String中去,所以它内部提供了一个StringBuffer中用来保存数据

 

以及他们的构造方法即可

其他的方法遵循Reader 或者Writer的家族协议

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值