[二十]JavaIO之StringReader 與 StringWriter
阿新 • • 發佈:2018-09-13
pad bubuko 過去 標記 下標 通過 cell exce 資源
還記得前面說過的CharArrayReader 和 CharArrayWriter嗎? CharArray 是數據源 CharArrayReader 是讀, 從一個CharArray 中讀取,所以需要一個CharArray,通過構造方法傳遞 CharArrayWriter 是寫, 寫入到一個CharArray中去,所以它內部提供了一個CharArray 用來保存數據
StringReader 和 StringWriter 也是類似的道理 String作為數據源 StringReader 是讀, 從一個String中讀取,所以需要一個String ,通過構造方法傳遞
StringWriter是寫, 寫入到一個String中去,所以它內部提供了一個StringBuffer中用來保存數據
read方法
ready
skip
close
write照例提供了 write append方法 以及flush 方法 和 close方法 另外 因為內部的StringBuffer 它還提供了一個toString方法
不熟悉StringBuffer的, 可以先過去了解一下StringBuffer
toString
StringReader 和StringWriter 本身也沒什麽特別的,跟CharArrayReader 和 CharArrayWriter 非常的類似 也僅僅是一種數據源的形式而已
只需要記住本文開始說到的原理
以及他們的構造方法即可 其他的方法遵循Reader 或者Writer的家族協議
功能簡介
還記得前面說過的CharArrayReader 和 CharArrayWriter嗎? CharArray 是數據源 CharArrayReader 是讀, 從一個CharArray 中讀取,所以需要一個CharArray,通過構造方法傳遞 CharArrayWriter 是寫, 寫入到一個CharArray中去,所以它內部提供了一個CharArray 用來保存數據
StringReader 和 StringWriter 也是類似的道理 String作為數據源 StringReader 是讀, 從一個String中讀取,所以需要一個String ,通過構造方法傳遞
構造方法
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