• 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
  • 相关阅读:
    Ext文本框添加清除图标,
    gird鼠标移动显示tip
    shapefile文件导入mysql数据库
    百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现
    POSTGIS修复错误数据
    地图瓦片切片方案
    mapbox.gl源码解析——基本架构与数据渲染流程
    高斯克吕格与地理坐标相互转换算法(JS版本)
    mysql空间扩展对比postgis
    从maven central下载javax.media.jai_core:1.1.3时出错
  • 原文地址:https://www.cnblogs.com/shamo89/p/9612986.html
Copyright © 2020-2023  润新知