13 Java NIO 管道-翻译

244 阅读1分钟

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中写入的字节数。