功能簡介
還記得前面說過的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本身 |
![]() |
ready
skip
跳過流中指定數量的字符 返回跳過的字符數
此處 ns 參數可能為負數,雖然 Reader 超類的 skip 方法在此情況下會拋出一個異常
ns 為負值導致此流向后跳讀 負返回值指示向后跳讀 向后跳讀不可能倒過字符串的開頭
如果讀取或跳讀了整個字符串,則此方法無效且始終返回 0
|
了解到他可以為負數,而且返回值也可能是負數 |
close
StringWriter
write照例提供了 write append方法
以及flush 方法 和 close方法
另外
因為內部的StringBuffer 它還提供了一個toString方法
不熟悉StringBuffer的,
可以先過去了解一下StringBuffer
三個版本的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的家族協議