文档章节

13.Java NIO Pipe 管道

逝去的回忆
 逝去的回忆
发布于 2016/11/19 17:08
字数 337
阅读 68
收藏 1

精选30+云产品,助力企业轻松上云!>>>

一个Java NIO的管道是两个线程间单向传输数据的连接。一个管道(Pipe)有一个source channel和一个sink channel(没想到合适的中文名)。我们把数据写到sink channel中,这些数据可以同过source channel再读取出来。

下面是一个管道的示意图:

一个Java NIO的管道是两个线程间单向传输数据的连接。一个管道(Pipe)有一个source channel和一个sink channel(没想到合适的中文名)。我们把数据写到sink channel中,这些数据可以同过source channel再读取出来。

下面是一个管道的示意图:

http://tutorials.jenkov.com/images/java-nio/pipe-internals.png

创建管道(Creating a Pipe)

打开一个管道通过调用Pipe.open()工厂方法,如下:

Pipe pipe = Pipe.open();

向管道写入数据(Writing to a 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);
}

从管道读取数据(Reading from a Pipe)

类似的从管道中读取数据需要访问他的source channel:

Pipe.SourceChannel sourceChannel = pipe.source();

接下来调用read()方法读取数据:

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);

注意这里read()的整形返回值代表实际读取到的字节数。

逝去的回忆
粉丝 16
博文 136
码字总数 219872
作品 0
深圳
高级程序员
私信 提问
加载中
请先登录后再评论。
Java NIO系列教程(十一) Pipe

Java NIO系列教程(十一) Pipe Java NIO 管道是 2 个线程之间的单向数据连接。Pipe 有一个 source 通道和一个 sink 通道。数据会被写到 sink 通道,从 source 通道读取。 这里是 Pipe 原理的...

osc_3fp081wq
2018/11/18
1
0
Java NIO系列教程(十一) Pipe

Java NIO系列教程(十一) Pipe 原文链接 作者:Jakob Jenkov 译者:黄忠 校对:丁一 Java NIO 管道是2个线程之间的单向数据连接。有一个source通道和一个sink通道。数据会被写到sink通道,从...

long0404
2015/03/06
0
0
NIO下_使用示例

一.分散与聚集 1.分散读取(Scattering Reads):将通道中的数据分散到多个缓冲区中 2.聚集写入(Gathering Writes):将多个缓冲区中的数据聚集到通道中 public void test4() throws IOExcep...

osc_o18rkfva
2018/02/22
0
0
十一, Pipe

Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。 这里是Pipe原理的图示: 创建管道 通过Pipe.open()方法打开管道...

莫问viva
2014/03/07
33
0
java 基础-- 网络 NIO(5)

网络通信 NIO 1、阻塞与非阻塞 a 传统的IO流都是阻塞式的。也就是说,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。 因此...

osc_o9hwrm96
2018/08/16
2
0

没有更多内容

加载失败,请刷新页面

加载更多

【题解】p6160 [Cnoi2020]向量

原题传送门 序 啊又是勤奋学习的一天...... 这种mo题目能做出来纯靠感觉。 样例分析 样例输入给了组3、4、5的勾股数,而输出正好是三向量加和为0时的答案。 嗯我好像感觉到了什么...... 于是...

osc_4dady4pk
22分钟前
13
0
【题解】p6160 [Cnoi2020]向量

原题传送门 序 啊又是勤奋学习的一天...... 这种mo题目能做出来纯靠感觉。 样例分析 样例输入给了组3、4、5的勾股数,而输出正好是三向量加和为0时的答案。 嗯我好像感觉到了什么...... 于是...

osc_a7a1prn6
23分钟前
13
0
FreeSql (一)入门

FreeSql是一个功能强大的 .NET ORM 功能库,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 所有运行平台。(QQ群:4336577) 模型 FreeSql 使用模型执行数据访问,模...

osc_smzoc82r
24分钟前
18
0
TCP协议粘包问题详解

TCP协议粘包问题详解 前言   在本章节中,我们将探讨TCP协议基于流式传输的最大一个问题,即粘包问题。本章主要介绍TCP粘包的原理与其三种解决粘包的方案。并且还会介绍为什么UDP协议不会产...

osc_tjnx25e9
26分钟前
12
0
Ubuntu16.04密码正确 进不去桌面系统(已测试恢复正常)

遇到过两次ubuntu输入密码正确,但是进不去系统,输入密码后,跳转到一下界面 之后又返回到登陆界面,一直这样循环输入密码。 Guest用户可以。 解决办法:   1。进入tty下 :ctrl+alt+F1(F...

osc_lfbryx1h
27分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部