閱讀239 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java IO: 字符流的Piped和CharArray

本章節將簡要介紹管道與字符數組相關的reader和writer,主要涉及PipedReader、PipedWriter、CharArrayReader、CharArrayWriter。

PipedReader

原文鏈接

PipedReader能夠從管道中讀取字符流。與PipedInputStream類似,不同的是PipedReader讀取的是字符而非字節。換句話說,PipedReader用於讀取管道中的文本。代碼如下:

Reader reader = new PipedReader(pipedWriter);

int data = reader.read();

while(data != -1) {

    //do something with data...

    doSomethingWithData(data);

    data = reader.read();

}

reader.close();

注意:為了清晰,代碼忽略了一些必要的異常處理。想了解更多異常處理的信息,請參考Java IO異常處理

read()方法返回一個包含了讀取到的字符內容的int類型變量(譯者注:0~65535)。如果方法返回-1,表明PipedReader中已經沒有剩餘可讀取字符,此時可以關閉PipedReader。-1是一個int類型,不是byte或者char類型,這是不一樣的。

正如你所看到的例子那樣,一個PipedReader需要與一個PipedWriter相關聯,當這兩種流聯係起來時,就形成了一條管道。要想更多地了解Java IO中的管道,請參考Java IO管道

PipedWriter

原文鏈接

PipedWriter能夠往管道中寫入字符流。與PipedOutputStream類似,不同的是PipedWriter處理的是字符而非字節,PipedWriter用於寫入文本數據。代碼如下:

PipedWriter writer = new PipedWriter(pipedReader);

while(moreData()) {

    int data = getMoreData();

    writer.write(data);

}

writer.close();

PipedWriter的write()方法取一個包含了待寫入字節的int類型變量作為參數進行寫入,同時也有采用字符串、字符數組作為參數的write()方法。

CharArrayReader

原文鏈接

CharArrayReader能夠讓你從字符數組中讀取字符流。代碼如下:

char[] chars = ... //get char array from somewhere.

Reader reader = new CharArrayReader(chars);

int data = reader.read();

while(data != -1) {

    //do something with data

    data = reader.read();

}

reader.close();

如果數據的存儲媒介是字符數組,CharArrayReader可以很方便的讀取到你想要的數據。CharArrayReader會包含一個字符數組,然後將字符數組轉換成字符流。(譯者注:CharArrayReader有2個構造函數,一個是CharArrayReader(char[] buf),將整個字符數組創建成一個字符流。另外一個是CharArrayReader(char[] buf, int offset, int length),把buf從offset開始,length個字符創建成一個字符流。更多細節請參考Java官方文檔)

CharArrayWriter

原文鏈接

CharArrayWriter能夠把字符寫入到字符輸出流writer中,並且能夠將寫入的字符轉換成字符數組。代碼如下:

CharArrayWriter writer = new CharArrayWriter();

//write characters to writer.

char[] chars = writer.toCharArray();

當你需要以字符數組的形式訪問寫入到writer中的字符流數據時,CharArrayWriter是個不錯的選擇。

最後更新:2017-05-23 11:02:57

  上一篇:go  Java並發結構
  下一篇:go  並發性能優化 – 降低鎖粒度