[二十]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的家族協議
相關文章
相關標籤/搜索