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 ...
随机推荐
- js验证后台传递的map数据是否为空
if(JSON.stringify(data)=='{}'){ $("#year").append("<option>--请选择--</option&g ...
- webbrowser 响应关闭事件
void registerEvents(System.Windows.Forms.WebBrowser web) { var rnd = new Random(); ]; if (head == nu ...
- hibernate(一)
hibernate介绍 jdbc缺点 1代码结构防繁琐,面向纯sql语句的编程,对于查询而言只要查询数据库的一张表,不需有如下编码 2有connection缓存,没有数据缓存 3.事务自动开启,有 ...
- pread和pwrite函数
先来介绍pread函数 [root@bogon mycode]# cat test.c #include<stdio.h> #include<stdlib.h> #includ ...
- .NET本质论 类型基础
类型概述 类型是CLR程序的生成块(building block). CLR类型(CLR type)是命名的可重用抽象体. CLR类型定义由零个或多个成员(member)组成.类型的成员控制类型如何使 ...
- script标签的同步和异步
1).把<script>标签放在<head>中意味着必须等到全部的js代码都下载解析和执行完成以后,才开始展现页面内容,为避免这个问题一般把js代码全部放在<body&g ...
- Java锁的选择
1.synchronized: 当只有少量竞争者.synchronized不会引发死锁 2.ReentrantLock:竞争者不少,但是趋势可以预估.使用不当,可能造成死锁.
- Tornado 模板(StaticFileHandler/static_path/template_path等) 笔记
使用StaticFileHandler进行首页默认访问页面,最好将StaticFileHandler放在最后面,这样不会覆盖要匹配自定义的路径 import tornado.web import to ...
- Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)成功烧录方法
问题: Arduino:1.6.3 (Windows 7), 板:"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)" Sketch ...
- Go 缓冲信道和非缓冲信道
非缓冲信道是一个进一个出,再一个进再一个出,信道内是不保存数据的 缓冲信道是可以很多个依次进去,存储在信道里,然后一个一个的按次序取出来. 不过缓冲信道如果超过了预期的存入个数,会发生信道阻塞,只有把 ...