13 Java NIO 管道-翻譯

王金龍發表於2017-12-06

Java NIO管道是在兩個執行緒之間的單向資料連線。一個管道有一個Source和Sink Channel。資料可以從Source Channel中讀取。

下圖說明了管道的原則:

image

建立一個管道

可以通過Pipe.open()方法開啟一個管道,如下所示:

Pipe pipe = Pipe.open();
複製程式碼

向管道寫入資料

向管道寫入資料需要訪問Sink Channel。如下面所示:

Pipe.SinkChannel sinkChannel = pipe.sink();
複製程式碼

可以通過SinkChannel的write()方法,像這樣:

String newData = "New String to write to file..." + System.currentTimeMillis();

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());

buf.flip();

while(buf.hasRemaining()) {
    sinkChannel.write(buf);
}
複製程式碼

從管道中讀取資料

從管道中讀取資料需要訪問SourceChannel,如下所示:

Pipe.SourceChannel sourceChannel = pipe.source();
複製程式碼

從管道中讀取資料可以呼叫它的read()方法,像這樣:

ByteBuffer buf = ByteBuffer.allcate(48);
int byteRead = inChannel.read(buf);
複製程式碼

read()方法的返回值已經向buffer中寫入的位元組數。

相關文章