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