Java NIO 之管道(Pipe)

java NIO管道是俩个线程间的单路数据链接。 每一个管道Pipe都有一个source channel 和一个sink channel。你把数据写入到sinkchannel中,然后就可以从sourcechannel中读取到该数据。

下面是一张关于管道原则的图例:


Java NIO: 管道的内部结构


1.创建一个管道

通过调用Pipe.open()方法,你可以打开一个管道。正如如下所示:

Pipe pipe = Pipe.open();


2.向管道中写

要想向Pipe中写入数据,你需要访问sink channel。像下面的代码所示:

Pipe.SinkChannel sinkChannel = pipe.sink();

调用它的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);

}



3.从管道中读

要想从管道中读数据,你需要先获取source channel。正如下面所示:

Pipe.SourceChannel sourceChannel = pipe.source();

从source channel中读取数据,你可以调用它的read()方法,正如下所示:

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead =inChannel.read(buf);

read()方法返回的int值就是在告诉我们有多少字节的数据读入到了buffer里面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容