首页 > 编程语言 >Java NIO系列教程(十一) Pipe

Java NIO系列教程(十一) Pipe

时间:2023-07-31 10:32:15浏览次数:37  
标签:Java NIO Pipe source 管道 sink ByteBuffer buf


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

这里是Pipe原理的图示:

Java NIO系列教程(十一) Pipe_Nio

 

创建管道

通过Pipe.open()方法打开管道。例如:

Pipe pipe = Pipe.open();

向管道写数据

要向管道写数据,需要访问sink通道。像这样:

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通道,像这样:

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,source,管道,sink,ByteBuffer,buf
From: https://blog.51cto.com/u_2650279/6905905

相关文章

  • Java NIO系列教程(三) Buffer
    JavaNIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIOBuffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIOBuffer相关的话题列表: Buffe......
  • reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.IndexOutOfBoundsE
    生产环境好好的,突然前端请求全部跨域,请求500。gateway报错。reactor.core.Exceptions$ErrorCallbackNotImplemented:java.lang.IndexOutOfBoundsException:Index:0,Size:0。所有的接口都报。原因由于gateway也集成了springboot-admin,开启了应用程序的actuator端点,导致......
  • #yyds干货盘点#JavaScript正则表达式(手机号码、邮箱、日期)
    JavaScript正则表达式(手机号码、邮箱、日期)在平时的工作中,经常会遇到一些验证的功能,其中如号码、邮箱、日期之类的验证,但是在平常使用时,直接就抄了一份用,并没有很详细的研究过,所以就在这儿记录了一些常用的表达式,慢慢学习的同时,也分享给大家。手机号码由于现在虚拟号码的使用,所以......
  • 深入探究Java 17中的外部函数和内存API
    导言Java17作为JDK的最新版本,带来了许多令人兴奋的新特性和改进。在本篇博客中,我们将聚焦于Java17中的两个重要主题:外部函数(ForeignFunction)和内存API(MemoryAPI)。这两个功能的引入为Java开发者们提供了更多的灵活性和性能优势,让我们一起深入探究它们的作用和用法。一、外部函数......
  • JVM调优篇:探索Java性能优化的必备种子面试题
    JVM内存模型首先面试官会询问你在进行JVM调优之前,是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区(1.7之后更改为元空间,并直接使用系统内存)。正常堆内存又分为年轻代和老年代。在Java虚拟机中,年轻代用......
  • java基础——泛型
    泛型的引入看下面这段代码:privatestaticintadd(inta,intb){System.out.println(a+"+"+b+"="+(a+b));returna+b;}privatestaticfloatadd(floata,floatb){System.out.println(a+"+"+b+"="+......
  • Java面试题 P17:Redis篇:Redis使用场景-缓存-缓存穿透
    什么是缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把数据库压垮。  互斥锁代码:1privatefinalReadWriteLockreadWriteLock=newReentrantReadWriteLock();2privatefinalLock......
  • javaee 创建泛型类 泛型接口
    泛型类packagecom.test.generic;//泛型类publicclassBox<T>{ privateTt; publicTgetT(){ returnt; } publicvoidsetT(Tt){ this.t=t; } publicBox(Tt) { this.t=t; }}泛型接口packagecom.test.generic;//泛型接口publicinterface......
  • 如何正确理解JavaScript中的函数和方法
    你真的了解JavaScript的函数和方法吗?你知道它们有什么区别吗?你知道它们是如何定义和调用的吗?你知道它们是如何影响this值的吗?如果你对这些问题感到迷茫,那么本文就是为你准备的。本文将从基础开始,详细解释函数和方法的概念、特点、用法和联系,让你彻底弄清楚函数和方法的奥秘。JavaSc......
  • Java反序列化Commons-Beanutils篇-CB链
    <1>环境介绍jdk:jdk8u65CB:commons-beanutils1.8.3pom.xml添加<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dep......