zoukankan      html  css  js  c++  java
  • NIO之管道 (Pipe)

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


    代码使用示例:

    public static void main(String[] args){
            Pipe pipe = null;
            Pipe.SinkChannel sinkChannel = null;
            Pipe.SourceChannel sourceChannel = null;
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            try {
                // 1.获取管道
                pipe = Pipe.open();
                
                // 2.获取管道channel
                sinkChannel = pipe.sink();
                sourceChannel = pipe.source();
                
                // 3.写入和读取数据
                while (true) {                
                    Thread.sleep(3000);
                    
                    // 4.缓冲区数据写入管道
                    byteBuffer.put((CommonUtil.getDateTime()+" 编号 "+UUID.randomUUID().toString()).getBytes());
                    byteBuffer.flip();// 这一步不能少
                    sinkChannel.write(byteBuffer);
    
                    // 5.从管道读数据
                    byteBuffer.flip();
                    int len = sourceChannel.read(byteBuffer);
                    System.out.println("get "+new String(byteBuffer.array(), 0, len)); 
                    
                    // 6.清除buffer
                    byteBuffer.clear();
                }
                
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally{
                if (sinkChannel!=null) {
                    try {
                        sinkChannel.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
                if (sourceChannel!=null) {
                    try {
                        sourceChannel.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }

     结果

    run:
    get 2009-01-01 19:55:00 编号 89db440c-b604-4c88-ae35-b096e4ef5f7d
    get 2009-01-01 19:55:03 编号 46ba3f12-5f2e-476a-b240-8271dff609e0
    get 2009-01-01 19:55:06 编号 96b2db5c-4391-4ba2-87eb-5f6a9824b890
    get 2009-01-01 19:55:09 编号 2f263244-6062-4c0d-8cb6-f2707b6c83e1
    get 2009-01-01 19:55:12 编号 a0a144f5-56ef-4266-b9d7-591064ce782d
    get 2009-01-01 19:55:15 编号 dbd53474-7efa-43e7-9869-04b0dd76148e
  • 相关阅读:
    移动端图片懒加载插件
    Animate.css 教程
    git使用图解
    React-Native学习指南
    react-native 环境配置及hello world
    修改文件后浏览器自动刷新解决方案
    react-native 布局基础
    MongoDB数据库安装及配置环境(windows10系统)
    MongoDb windows环境安装,附百度云链接
    常用的几类npm依赖包管理
  • 原文地址:https://www.cnblogs.com/shamo89/p/9612986.html
Copyright © 2011-2022 走看看