1. 程式人生 > >Java IO: 字元流的Piped和CharArray

Java IO: 字元流的Piped和CharArray

作者: Jakob Jenkov 譯者: 李璟([email protected])

本章節將簡要介紹管道與字元陣列相關的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是個不錯的選擇。