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

最后更新时间:2014-06-23

一个Java NIO管道是在两个线程之间的单向的数据连接。一个管道有一个源通道和一个下沉通道。你写数据到一个下沉的通道。这个数据然后从源通道中读取。

这里有一个管道原则的示意图:

创建一个管道

你可以通过调用Pipe.open()方法打开一个管道,像下面这样:

Pipe pipe = Pipe.open();

写入一个管道

为了写入一个管道,你需要访问这个下沉的通道,像下面这样:

Pipe.SinkChannel sinkChannel = pipe.sink();

通过调用write()方法写入一个SinkChannel,像这样:

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);
}

从一个管道中读

为了从一个管道中读取数据,你需要访问这个源通道,像下面这样:

Pipe.SourceChannel sourceChannel = pipe.source();

为了从源通道中读取数据,你可以调用read()方法,像下面这样:

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);

通过read方法返回的int值会告诉你有多少字节读到了buffer中。

翻译地址:http://tutorials.jenkov.com/java-nio/pipe.html

时间: 2024-10-17 19:37:10

Java Nio 十三、Java NIO Pipe(管道)的相关文章

Java之十三 Java多线程

你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持.然而,多任务处理有两种截然不同的类型:基于进程的和基于线程的.认识两者的不同是十分重要的.对很多读者,基于进程的多任务处理是更熟悉的形式.进程(process)本质上是一个执行的程序.因此,基于进程(process-based)的多任务处理的特点是允许你的计算机同时运行两个或更多的程序.举例来说,基于进程的多任务处理使你在运用文本编辑器的时候可以同时运行Java编译器.在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位.在基

学习 java netty (一) -- java nio

前言:最近在研究java netty这个网络框架,第一篇先介绍java的nio. java nio在jdk1.4引入,其实也算比较早的了,主要引入非阻塞io和io多路复用.内部基于reactor模式. nio核心: - buffer - channel - selector buffer: 类似网络编程中的缓冲区,有 ByteBuffer 字节 CharBuffer 字符 IntBuffer DoubleBuffer- 常用的有ByteBuffer和CharBuffer java nio buf

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introduction/ netty是基于NIO实现的异步事件驱动的网络编程框架,学完NIO以后,应该看看netty的实现,netty框架涉及的内容特别多,这里只介绍netty的基本使用和实现原理,更多扩展的内容将在以后推出. 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎

Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ 浅谈 Linux

Java I/O and NIO [reproduced]

Java I/O and NIO.2---Five ways to maximize Java NIO and NIO.2---Build more responsive Java applications with the New Input/Output APIs Java NIO -- the New Input/Output API package-- was introduced with J2SE 1.4 in 2002. Java NIO's purpose was to impr

我的Java开发学习之旅------>Java NIO 报java.nio.charset.MalformedInputException: Input length = 1异常

今天在使用Java NIO的Channel和Buffer进行文件操作时候,报了java.nio.charset.MalformedInputException: Input length = 1异常,具体如下: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:260) at java.nio.char

Java IO和Java NIO在文件拷贝上的性能差异分析 (转)

1.       在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取 到用户空间的缓冲区.参看read(byte b[])方法的源码,可知,它会在内部再调用readBytes(b, 0, b.length)方法,而且readBytes(b, 0, b.length)方法是一个native方法(即本地方法),最终通过这个本地方法来发起一次系统调用,即调用系统内核的read()

Java.nio vs Java.io

Java.nio vs Java.io By Nino Guarnacci on Jun 18, 2009 --- posted by Davide Pisano This document is not a Java.io or a Java.nio manual, or a technical document about Java.io and Java.nio use. It only attempts to compare these two packages, highlightin

java对比IO和NIO的文件读写性能测试

原文:java对比IO和NIO的文件读写性能测试 源代码下载地址:http://www.zuidaima.com/share/1550463508466688.htm 1. NIO采用更接近操作系统执行IO的方式:通道和缓存器:顾名思义,数据源的数据由缓存器通过通道进行传输. 2. 在JDK5之后,原始IO系统底层用NIO进行了优化,这可以通过sun公布的源码中找到,但是,NIO系统性还是比IO强. 3. 在稍微研究了IO源码以及部分sun源码,我觉得IO系统的性能瓶颈主要是由于原始的IO架构因

深入Java网络编程与NIO(二)

Java NIO 学习总结 NIO的特性/NIO与IO区别: 1)IO是面向流的,NIO是面向缓冲区的: 2)IO流是阻塞的,NIO流是不阻塞的; 3)NIO有选择器,而IO没有. 读数据和写数据方式: 从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据. 从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据. NIO三大核心组件:Channels .Buffers .Selectors 1.Buffers 其实核心是最后的 ByteBuffer,前面的一大串类只是包装了一