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

创建管道
通过Pipe.open()方法打开管道。例如:
1 |
Pipe pipe = Pipe.open(); |
向管道写数据
要向管道写数据,需要访问sink通道。像这样:
1 |
Pipe.SinkChannel sinkChannel = pipe.sink(); |
通过调用SinkChannel的write()方法,将数据写入SinkChannel,像这样:
01 |
String newData = "New String to write to file..." + System.currentTimeMillis(); |
02 |
ByteBuffer buf = ByteBuffer.allocate(48); |
03 |
buf.clear(); |
04 |
buf.put(newData.getBytes()); |
05 |
06 |
buf.flip(); |
07 |
08 |
while(buf.hasRemaining()) { |
09 |
sinkChannel.write(buf); |
10 |
} |
从管道读取数据
从读取管道的数据,需要访问source通道,像这样:
1 |
Pipe.SourceChannel sourceChannel = pipe.source(); |
调用source通道的read()方法来读取数据,像这样:
1 |
ByteBuffer buf = ByteBuffer.allocate(48); |
2 |
3 |
int bytesRead = sourceChannel.read(buf); |
read()方法返回的int值会告诉我们多少字节被读进了缓冲区。
Java NIO系列教程(十一) Pipe的更多相关文章
- 转:Java NIO系列教程(九) Pipe
Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pi ...
- Java NIO系列教程(十一) Java NIO 与 IO
Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ...
- Java NIO系列教程(三-十二) Buffer
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- Java NIO系列教程(八)JDK AIO编程
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- Java NIO系列教程(七) selector原理 Epoll版的Selector
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- Java NIO系列教程(三) Channel之Socket通道
目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ...
- Java NIO系列教程(二) Channel通道介绍及FileChannel详解
目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> Channel是一个通道,可以通过它读取和写入 ...
- Java NIO系列教程(十)DatagramChannel
Java NIO系列教程(十)DatagramChannel 转载自并发编程网 – ifeve.com,本文链接地址: Java NIO系列教程(十) Java NIO DatagramChannel
- Java NIO系列教程(四) Scatter 和 Gather
Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Chann ...
随机推荐
- linux 用户配制文件 用户增加及删除 以及用户属于的更改
1.用户密码文件 /etc/passwd root : x : 0 : 0 : root : /root : / ...
- RPC 原理
转载地址:你应该知道的 RPC 原理 在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司 ...
- (1)HTML的组成(什么是标签、指令、转义字符、数据、标签字符表)
html的组成:标签+指令+转义字符+数据 1.标签 <>内的,以字母开头,可以结合合法字符(- 或者数字),能被浏览器解析的符号 <!DOCTYPE html> #这个是系统 ...
- 【HDOJ1534】【差分约束+SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=1534 Schedule Problem Time Limit: 2000/1000 MS (Java/Other ...
- 《DSP using MATLAB》Problem 5.4
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- Go Example--值运算
package main import "fmt" //通过import导入fmt标准包 func main() { //+号可以用做连接字符串 fmt.Println(" ...
- JDBC面试题
关于jdbc的面试题 什么是JDBC,在什么时候会用到它? JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相 ...
- Architecture options to run a workflow engine
This week a customer called and asked (translated into my own words and shortened): “We do composite ...
- Sql server日期函数用法
SQL日期函数 SQL日期函数中的类型码可以为0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 ,20,21,22,23,24,25,100,101,102,103,104,105 ...
- day 31 进程的其他方法 进程锁 进程队列
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...