[二十]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為標記點
image_5b9a23fa_9b6

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的家族協議



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM