使用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();
                    }
                }
            }
        });
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章