Java NIO(七)管道

Java NIO 管道是两个线程之间的单向数据连接。Pipe有一个source通道和sink通道(内部类)。数据会被写到sink通道,从source通道读取。

给一张Pipe通道的原理图:

创建管道:

Pipe pipe = Pipe.open();

向管道写数据:

Pipe.SinkChannel sinkChannel = pipe.sink();

String str = "some things";ByteBuffer buf = ByteBuffer.allcote(1024);buf.clear();buf.put(str.getBytes());buf.flip();

while(buf.hasRemaining()){  sinkChannel.write(buf)}

从管道读数据:

Pipe.SourceChannel sourceChannel = pipe.source();

ByteBuffer buf = ByteBuffer.allcote(1024);int bytr = sourceChannel.read(buf);

read()方法返回的int值会告诉我们写入了多少个字节到缓冲区

原文地址:https://www.cnblogs.com/yushangzuiyue/p/8471702.html

时间: 2024-10-03 14:24:18

Java NIO(七)管道的相关文章

Java NIO 完全学习笔记(转)

本篇博客依照 Java NIO Tutorial翻译,算是学习 Java NIO 的一个读书笔记.建议大家可以去阅读原文,相信你肯定会受益良多. 1. Java NIO Tutorial Java NIO,被称为新 IO(New IO),是 Java 1.4 引入的,用来替代 IO API的. Java NIO:Channels and Buffers 标准的 Java IO API ,你操作的对象是字节流(byte stream)或者字符流(character stream),而 NIO,你操

Java NIO (五) 管道 (Pipe)

Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 如下图: 向管道写数据: 从管道读数据: 1. 从读取管道的数据,需要访问source通道. 2. 调用source通道的read()方法来读取数据

Java NIO -- 管道 (Pipe)

Java NIO 管道是2个线程之间的单向数据连接. Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 举个例子: package com.soyoungboy.nio; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.Pipe; import org.junit.Test; public class TestPipe { @Tes

Java Nio 十三、Java NIO Pipe(管道)

最后更新时间:2014-06-23 一个Java NIO管道是在两个线程之间的单向的数据连接.一个管道有一个源通道和一个下沉通道.你写数据到一个下沉的通道.这个数据然后从源通道中读取. 这里有一个管道原则的示意图: 创建一个管道 你可以通过调用Pipe.open()方法打开一个管道,像下面这样: Pipe pipe = Pipe.open(); 写入一个管道 为了写入一个管道,你需要访问这个下沉的通道,像下面这样: Pipe.SinkChannel sinkChannel = pipe.sink

java nio管道

管道(Pipe) (本部分原文链接,作者:Jakob Jenkov,译者:黄忠,校对:丁一) Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pipe.open()方法打开管道.例如: Java代码 Pipe pipe = Pipe.open(); 向管道写数据 要向管道写数据,需要访问sink通道.像这样: Java代码 Pipe.SinkChan

基于管道的即时通信(java nio)

此项目实现原理 sevice只需往管道中(数据池)中发送数据,等到池中有数据了,它自动会找你.你不必要关心数据怎么发送与接收,只需要关注你业务的处理. 如下图 优点: 基于管道的实现是消息的发送或接受只需要发送到管道或者从管道读取,而不用关注如何通过Channer发送,这样则实现了service层与socket的解耦. 依赖于广播而不依赖于回调函数,与nio的异步非阻塞,真正实现线程的零等待. 缺点: 发送的数据很难通过会掉函数实现(或者根本不能),只能通过广播实现. 相关类介绍 ClientM

Java NIO学习笔记七 Non-blocking Server

Java NIO:Non-blocking Server 即使你了解了Java NIO非阻塞功能的工作(怎么样Selector,Channel, Buffer等等),设计一个无阻塞服务器仍然很难.非阻塞IO包含了相比阻塞IO的要有难度.本章非阻塞服务器教程将讨论非阻塞服务器的主要挑战,并为他们描述一些潜在的解决方案. 本教程中描述的想法是围绕Java NIO设计的.但是,我认为,只要有这样的构造,这些想法可以用其他语言重复使用Selector.据我所知,这样的结构是由底层操作系统提供的,所以很有

Java NIO系列教程(七) FileChannel

Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用FileChannel之前,必须先打开它.但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream.OutputStream或RandomAccessFile来获取一个FileChannel实例.下面是通过RandomAccessFile打开FileChannel的示例

java nio学习(七)

FileChannel Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用FileChannel之前,必须先打开它.但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream.OutputStream或RandomAccessFile来获取一个FileChannel实例.下面是通过RandomAccessFile打开Fi