該類繼承自Writer類
無引入包
類頭註釋如下:
* Piped character-output streams.
大意如下:
管道字符型輸出流
該類含有如下的成員變量:
對應的管道流輸入流
private PipedReader sink;
關閉標誌符
private boolean closed = false;
該類含有如下的成員方法:
構造函數(與給定的輸入管道相連接
public PipedWriter(PipedReader snk) throws IOException { connect(snk); }
構造函數(默認,無連接管道
public PipedWriter() { }
管道連接
public synchronized void connect(PipedReader snk) throws IOException { if (snk == null) {//檢查輸入管道有效性 throw new NullPointerException(); } else if (sink != null || snk.connected) {//檢查連接狀態 throw new IOException("Already connected"); } else if (snk.closedByReader || closed) {//檢查活動情況 throw new IOException("Pipe closed"); } sink = snk; snk.in = -1;//初始化緩衝區指針 snk.out = 0; snk.connected = true; }
寫入字符數組數據
public void write(char cbuf[], int off, int len) throws IOException { if (sink == null) { throw new IOException("Pipe not connected"); } else if ((off | len | (off + len) | (cbuf.length - (off + len))) < 0) { throw new IndexOutOfBoundsException(); } sink.receive(cbuf, off, len);//調用輸入流的讀取函數 }
刷新輸出流
public synchronized void flush() throws IOException { if (sink != null) {//檢測連接狀態 if (sink.closedByReader || closed) {//輸入端活性和管道關閉情況 throw new IOException("Pipe closed"); } synchronized (sink) { sink.notifyAll();//喚醒所有掛起的線程(主要還是讀線程,把緩衝區內容讀出,寫線程會自動阻塞 } } }
關閉管道連接
public void close() throws IOException { closed = true; if (sink != null) { sink.receivedLast();//喚醒所有線程,修改關閉狀態 } }
該類與PipedOutputStream類似,主要也是調用輸入流的函數和方法,本體作爲一個抽象出的控制模塊而存在,主要功能都在PipedReader裏,請先去學習該類