javaIO——StringReader & StringWriter


 

  上一篇概述篇說過,一個IO對象是指一個可以被關閉的數據源或者目標,那么StringReader和StringWriter就是一個字符串源和字符串目標。

  1. StringtReader:

    

    文檔說:StringReader 是一個數據源為string的字符流。它的實現也非常簡單,內置了一個str字段,在構造函數中初始化這個字段,從ensureOpen方法可以看出,只要構造時的參數不為空,那么代表流已經打開,可以進行后續的讀取操作了。

    StringReader重寫了父類的read方法:

    

    從圖中可以看出,StringReader讀取的過程中,實際就是將位置指針標記后移,值得注意的兩點是:

      1.1. read方法都進行了同步,因為讀取的過程中進行了指針后移的操作,不同步會導致重復讀取或者跳讀;

      1.2. read都是將返回值-1作為流的結尾標志(事實上這也是整個java流家族通用的結束標致);

    此外,StringReader還實現了 mark和reset方法,mark即是標記當前指針位置,reset即是將指針重置到標記位置。

 

  2. StringWriter:

    

    StringWriter是將一個StringBuffer對象作為輸出目的地,並且可以在構造函數指定 buffer 的大小。StringWriter只是將數據寫入到一個buffer對象中,而不是實質的物理介質,這個對象最后又可以轉換成字符串(toString)。

    StringWriter支持 write和append兩種方法,區別在於,write方法返回空,而append方法返回流對象本身(也就是可以寫成這種格式: append().append())。

    其中,write方法參數支持單字符、字符數組、字符串,並且當參數為數組或者字符串時,可以指定范圍(偏移量和取值長度):

      

    append方法支持CharSequence對象和單個字符。

    前面說read方法加了同步,為什么write和append卻沒有加呢?其實是因為:write和append方法最后都是調用了StringBuffer.append()方法,而它是同步的。

  


免責聲明!

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



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