Java基础知识强化之IO流笔记82:NIO之 Pipe(管道)
2016-03-30 09:34
856 查看
1. Java NIO 管道是2个线程之间的单向数据连接。
这里是Pipe原理的图示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/08/f25e588288dc6ee3f77460d45c1c6bfb.png)
2. [b]
(1)创建管道
通过
(2)向管道写数据
要向管道写数据,需要访问sink通道。像这样:
通过调用SinkChannel的
(3)从管道读取数据
从读取管道的数据,需要访问source通道,像这样:
调用source通道的
Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。
这里是Pipe原理的图示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/08/f25e588288dc6ee3f77460d45c1c6bfb.png)
2. [b]
Pipe使用[/b]
(1)创建管道
通过
Pipe.open()方法打开管道。例如:
Pipe pipe = Pipe.open();
(2)向管道写数据
要向管道写数据,需要访问sink通道。像这样:
Pipe.SinkChannel sinkChannel = pipe.sink();
通过调用SinkChannel的
write()方法,将数据写入[b]SinkChannel,像这样:[/b]
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通道,像这样:
Pipe.SourceChannel sourceChannel = pipe.source();
调用source通道的
read()方法来读取数据,像这样:
ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = sourceChannel.read(buf);
read()方法返回的int值会告诉我们多少字节被读进了缓冲区。
相关文章推荐
- eclipse使用、调优
- SpringMVC 流程处理
- Java线程中yield与join方法的区别
- MyEclipse 启动报错:'Building workspace' has encountered a problem解决方法
- struts2 中 result type="stream"
- Java反射机制详解
- JMM——重排序与内存屏障
- Struts表单校验插件:Validator框架
- (第4讲)Java集合分类
- spring实现AOP的两种方式以及实现动态代理方式
- 解决Struts,formfile下,上传文件时,文件名和表单其他属性项的值乱码的最终解决方案...
- 抽象类和接口
- Eclipse调优
- spring开发aop应用三种方法
- Java基础知识强化之IO流笔记81:NIO之 DatagramChannel
- Spring AOP
- spring IOC和AOP
- java判断奇数
- java初学者常见问题(2)
- Java基础知识强化之IO流笔记80:NIO之 ServerSocketChannel