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

代码使用示例:

  1. public static void main(String[] args){
  2. Pipe pipe = null;
  3. Pipe.SinkChannel sinkChannel = null;
  4. Pipe.SourceChannel sourceChannel = null;
  5. ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
  6. try {
  7. // 1.获取管道
  8. pipe = Pipe.open();
  9.  
  10. // 2.获取管道channel
  11. sinkChannel = pipe.sink();
  12. sourceChannel = pipe.source();
  13.  
  14. // 3.写入和读取数据
  15. while (true) {
  16. Thread.sleep(3000);
  17.  
  18. // 4.缓冲区数据写入管道
  19. byteBuffer.put((CommonUtil.getDateTime()+" 编号 "+UUID.randomUUID().toString()).getBytes());
  20. byteBuffer.flip();// 这一步不能少
  21. sinkChannel.write(byteBuffer);
  22.  
  23. // 5.从管道读数据
  24. byteBuffer.flip();
  25. int len = sourceChannel.read(byteBuffer);
  26. System.out.println("get "+new String(byteBuffer.array(), 0, len));
  27.  
  28. // 6.清除buffer
  29. byteBuffer.clear();
  30. }
  31.  
  32. } catch (Exception ex) {
  33. ex.printStackTrace();
  34. } finally{
  35. if (sinkChannel!=null) {
  36. try {
  37. sinkChannel.close();
  38. } catch (IOException ex) {
  39. ex.printStackTrace();
  40. }
  41. }
  42. if (sourceChannel!=null) {
  43. try {
  44. sourceChannel.close();
  45. } catch (IOException ex) {
  46. ex.printStackTrace();
  47. }
  48. }
  49. }
  50. }

结果

  1. run:
  2. get 2009-01-01 19:55:00 编号 89db440c-b604-4c88-ae35-b096e4ef5f7d
  3. get 2009-01-01 19:55:03 编号 46ba3f12-5f2e-476a-b240-8271dff609e0
  4. get 2009-01-01 19:55:06 编号 96b2db5c-4391-4ba2-87eb-5f6a9824b890
  5. get 2009-01-01 19:55:09 编号 2f263244-6062-4c0d-8cb6-f2707b6c83e1
  6. get 2009-01-01 19:55:12 编号 a0a144f5-56ef-4266-b9d7-591064ce782d
  7. get 2009-01-01 19:55:15 编号 dbd53474-7efa-43e7-9869-04b0dd76148e

NIO之管道 (Pipe)的更多相关文章

  1. Java NIO -- 管道 (Pipe)

    Java NIO 管道是2个线程之间的单向数据连接. Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 举个例子: package com.soyo ...

  2. 管道Pipe

    管道Pipe java.nio.channels包中含有一个名为Pipe(管道)的类.广义上讲,管道就是一个用来在两个实体之间单向传输数据的导管.管道的概念对于Unix(和类Unix)操作系统的用户来 ...

  3. Java-NIO(九):管道 (Pipe)

    Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 代码使用示例: @Test public vo ...

  4. 5.管道 Pipe

    /*管道(Pipe)*/ Java NIO 管道是 /*2 个线程*/ 之间的 /*单向*/数据连接 Pipe 有一个 source 通道 和 一个 sink 通道.数据会被写到 sink 通道,从s ...

  5. Linux简单程序实例(GNU工具链,进程,线程,无名管道pipe,基于fd的文件操作,信号,scoket)

    一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o te ...

  6. 【IPC第二个进程间通信】管道Pipe

    IPC进程间通信+管道Pipe                IPC(Inter-Process Communication,进程间通信).         管道用于进程间共享数据,事实上质是共享内存 ...

  7. (转)Windows管道(Pipe)重定向stdout,stderr,stdin

    参考: http://qiusuoge.com/11496.html http://www.cnblogs.com/BoyXiao/archive/2011/01/01/1923828.html st ...

  8. [转]Angular2 使用管道Pipe以及自定义管道格式数据

    本文转自:https://www.pocketdigi.com/20170209/1563.html 管道(Pipe)可以根据开发者的意愿将数据格式化,还可以多个管道串联. 纯管道(Pure Pipe ...

  9. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)

    整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

随机推荐

  1. 完全背包【p1832】A+B Problem(再升级)

    Description 给定一个正整数n,求将其分解成若干个素数之和的方案总数. Input 一行:一个正整数n Output 一行:一个整数表示方案总数 素数之和 ? 背包啊. 没一遍切的题都不是水 ...

  2. ubuntu 进入 pycharm(社区版)

    先进入到pycharm所在的目录,然后进入bin 然后./pycharm.sh 例如,我把pycharm 放在桌面上 su ➜ xushukui cd '/home/xushukui/桌面/pycha ...

  3. 【DFS序】【线段树】bzoj4034 [HAOI2015]T2

    分开维护树的入栈序和出栈序,用两棵线段树.回答时就是用一颗的减去另一棵的. #include<cstdio> #include<algorithm> using namespa ...

  4. Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析

    Scala函数式编程 ----------------------------------------------------------------------------------------- ...

  5. Github上的iOS资料-个人记录

    动画 awesome-ios-animation收集了iOS平台下比较主流炫酷的几款动画框架 RCTRefreshControlqq的下拉刷新 TBIconTransitionKiticon 的点击动 ...

  6. u-boot-2012.10移植到AT91RM9200(包括NAND FLASH)

    基于中嵌SRM9204 目  录 1 配置 1.1修改顶层Makefile(可选) 1.2配置 1.3下载.运行.测试 2 修改内存配置参数(根据芯片手册修改) 2.1 修改配置参数 2.2 编译 2 ...

  7. 【java JVM】JVM中类的加载,加载class文件的原理机制

    暂时贴图一张,以后补充 解释: 1.符号引用替换为直接引用[参考:http://blog.csdn.net/maerdym/article/details/8087620] 在java中,一个java ...

  8. Plplot中line width 问题

    Plplot延续了Pgplot的设计风格,线的宽度函数plwid(int width)只能用整型变量,不能精确控制线宽.用pscairo画出的曲线总是太粗,这是plplot一个很老的问题(issue) ...

  9. 计算两个经纬度之间的距离(python算法)

    EARTH_REDIUS = 6378.137 def rad(d): return d * pi / 180.0 def getDistance(lat1, lng1, lat2, lng2): r ...

  10. flask admin学习记录

    flask admin是flask框架中一个非常好用的后台管理框架,但是由于文档内容太少,经常遇到问题无法解决,这里记录一下 一简单的使用 from flask import Flask from f ...