当前位置: 首页 > news >正文

使用java的nio的pipe实现两个线程间传送数据的demo

demo的代码

public class PipeDemo {
    public static void main(String[] args) throws Exception{
        Pipe p = Pipe.open();
        ExecutorService es = Executors.newFixedThreadPool(2);
        es.execute(new Runnable() {
            @Override
            public void run(){
                Pipe.SinkChannel sink = p.sink();
                ByteBuffer inB = ByteBuffer.allocate(48);
                Scanner s = new Scanner(System.in);
                while(true){
                    inB.put(s.next().getBytes());
                    inB.flip();
                    try {
                        while(inB.hasRemaining()){
                            sink.write(inB);
                        }
                    }
                    catch (Exception e){
                        e.printStackTrace();
                    }
                    finally {
                        inB.clear();
                    }
                }
            }
        });
        es.execute(new Runnable() {
            @Override
            public void run() {
                Pipe.SourceChannel source = p.source();
                ByteBuffer outB = ByteBuffer.allocate(48);
                while(true){
                    try{
                        source.read(outB);
                        outB.flip();
                        while(outB.hasRemaining()){
                            System.out.print((char)outB.get());
                        }
                    }
                    catch (Exception e){
                        e.printStackTrace();
                    }
                    finally {
                        outB.clear();
                    }
                }
            }
        });
    }
}

 

相关文章:

  • org.hibernate.TransactionException: nested transactions not supported异常
  • elasticsearch
  • rancher简介
  • InfluxDB+cAdvisor+Grafana容器管理
  • serviceComb[No schema defined for start.servicecomb.io:]异常
  • ServiceComb
  • kubernetes
  • 生产报redis连接满的问题
  • 一、Linux入门简述
  • 二、Linux入门之文件管理及相关命令
  • 3、Linux命令小例:用户权限管理、ls、cp、tr
  • 三、Linux入门之标准I/O重定向、管道、用户管理
  • 三、Linux入门之文件权限
  • 二、Linux入门之VIM编辑器
  • 四、Linux入门之文件查看命令
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [译] React v16.8: 含有Hooks的版本
  • 【css3】浏览器内核及其兼容性
  • 【刷算法】求1+2+3+...+n
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Bytom交易说明(账户管理模式)
  • CSS魔法堂:Absolute Positioning就这个样
  • GraphQL学习过程应该是这样的
  • JDK 6和JDK 7中的substring()方法
  • mockjs让前端开发独立于后端
  • Protobuf3语言指南
  • python大佬养成计划----difflib模块
  • Theano - 导数
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue-cli在webpack的配置文件探究
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 简单数学运算程序(不定期更新)
  • 类orAPI - 收藏集 - 掘金
  • 马上搞懂 GeoJSON
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • $forceUpdate()函数
  • (175)FPGA门控时钟技术
  • (31)对象的克隆
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十三)Flask之特殊装饰器详解
  • .gitignore文件—git忽略文件
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net IOC框架入门之一 Unity
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 读取 JSON格式的数据
  • .NET 反射 Reflect
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中创建支持集合初始化器的类型