首页 > 编程语言 >无涯教程-Java NIO - Pipe(管道)

无涯教程-Java NIO - Pipe(管道)

时间:2023-12-29 10:32:25浏览次数:43  
标签:Java NIO buffer 无涯 Pipe 管道 java 通道

在Java中,NIO Pipe(管道) 是用于在两个线程之间写入和读取数据的组件。Pipe(管道) 主要由两个通道组成,负责数据传输,在两个组成通道中,一个称为接收器通道,主要用于写入数据,另一个称为源通道,其主要目的是从接收器通道读取数据。

管道类函数

  • open()     - 此方法用于获取Pipe的实例,或者可以说通过调用此方法来创建管道。

  • sink()      - 此方法返回Pipe的接收器通道,该通道通过调用其write方法来写入数据。

  • source()  - 此方法返回Pipe的源通道,该通道通过调用其read方法来读取数据。

Pipe管道示例

以下示例显示了Java NIO管道的实现。

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;

public class PipeDemo {
   public static void main(String[] args) throws IOException {
      //创建 Pipe 的一个实例
      Pipe pipe=Pipe.open();
      //获取管道的 sink 通道
      Pipe.SinkChannel skChannel=pipe.sink();
      String testData="Test Data to Check java NIO Channels Pipe.";
      ByteBuffer buffer=ByteBuffer.allocate(512);
      buffer.clear();
      buffer.put(testData.getBytes());
      buffer.flip();
      //将数据写入接收器通道。
      while(buffer.hasRemaining()) {
         skChannel.write(buffer);
      }
      //获取管道的源通道
      Pipe.SourceChannel sourceChannel=pipe.source();
      buffer=ByteBuffer.allocate(512);
      //将数据写入控制台
      while(sourceChannel.read(buffer) > 0){
         //限制设置为当前位置,位置设置为零
         buffer.flip();
         while(buffer.hasRemaining()){
            char ch=(char) buffer.get();
            System.out.print(ch);
         }
         //position 设置为零,limit 设置为容量以清除缓冲区。
         buffer.clear();
      }
   }
}

运行上面代码输出

Test Data to Check java NIO Channels Pipe.

参考链接

https://www.learnfk.com/java-nio/java-nio-pipe.html

标签:Java,NIO,buffer,无涯,Pipe,管道,java,通道
From: https://blog.51cto.com/u_14033984/9024344

相关文章

  • idea 项目加载 全线飘红, @Service飘红,连 import java.util.List; 也飘红,终极解决方案
    常规方案:1、maven,检查maven配置,重新加载maven依赖,重新加载项目,把maven的本地私库删了重新下载2、检查idea配置,jdk配置,加载的项目的配置,idea清理缓存重启,等等3、是否更新了其他idea配置,比如git忽略文件里是否添加了*.class 4、重新安装idea5、及其他以上方案自行百度,都可以......
  • 定时任务 Java举例
    在Java中,可以使用多种方式进行定时任务的调度和执行。下面我将举例说明几种常用的定时任务的实现方式:Timer类:java.util.Timer类可以用于执行定时任务。可以通过创建Timer对象,并使用schedule(TimerTasktask,longdelay)或scheduleAtFixedRate(TimerTasktask,longdelay,lo......
  • 无涯教程-Java NIO - DataGramChannel
    JavaNIO数据报用作通道,可以通过较少连接的协议发送和接收UDP数据包。默认情况下,数据报通道处于阻塞状态,也可以在非阻塞模式下使用。为了使其成为非阻塞状态,无涯教程可以使用configureBlocking(false)方法。可以通过调用名为open()的静态方法之一来打开DataGram通道,该方法也可......
  • Java Spring Boot Mybatis-Plus 的简单使用
    此文主要基于官网case整理,如需了解更多详情,请移步官网。环境:SpringBoot:3.1.6JDK:17MySQL:5.7数据准备主要是MySQL建库建表,插入一些数据。建库:CREATEDATABASEmybatis_demo;建表:DROPTABLEIFEXISTS`user`;CREATETABLE`user`(idBIGINTNOTNULLCOMME......
  • 无涯教程-Java NIO - 简介
    Java1.4中引入了Java.nio包,引入了用于I/O操作的面向缓冲区和通道的数据流,从而提供了更快的执行速度和更好的性能。NIOAPI还提供了selector选择器,该选择器引入了以异步或非阻塞方式侦听IO事件的多个通道的功能。在NIO中,最耗时的I/O任务将缓冲区填充和释放到操作系统中,从而提高......
  • Java虚拟机内存模型概念
    Java虚拟机内存模型概念  Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区methodarea  一、栈stack  1. 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)  2.JVM为每个线程创建一个栈,用于存放该线程执......
  • JAVA学习12-28 数据类型
    数据类型学习publicclassDemo01{publicstaticvoidmain(String[]args){//单行注释/*多行注释*//*不能用关键字来做标识符*//*标识符可以大写字母,小写字母,美元符号,下划线_开头,不能以关键字作为变量名或方法名,-......
  • Java 实现List反转(reverse)的方法
    ​ List的反转是一种常见的操作,反转List会改变列表中元素的顺序,可以根据具体的需求在程序中实现不同的功能和行为。本文主要介绍Java中实现List反转(reverse)的方法,以及相关的示例代码。1、使用for循环实现使用for循环对List进行倒序遍历,添加到一个List中实现反转。代码示......
  • 无涯教程-Java泛型 - 不允许 重载
    一个类不允许具有两个在类型擦除后可以具有相同签名的重载方法。classBox{//Compilererror//Erasureofmethodprint(List<String>)//isthesameasanothermethodintypeBoxpublicvoidprint(List<String>stringList){}publicvoidprint(Li......
  • 无涯教程-Java泛型 - 不允许 数组
    不允许使用参数化类型的数组。//无法创建Box<Integer>的通用数组Box<Integer>[]arrayOfLists=newBox<Integer>[2];由于编译器使用类型擦除,因此将type参数替换为对象,并且用户可以将任何类型的对象添加到数组中。并且在运行时,代码将无法引发ArrayStoreException。//编译......