【Java-IO】PipedInputStream和PipedOutputStream
2016-02-16 20:32
471 查看
在概念上,Java的管道不同于Unix/Linux系统中的管道。
在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。
在Java中,通信的双方应该是运行在同一进程中的不同线程。
可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。
一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来。
在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。
在Java中,通信的双方应该是运行在同一进程中的不同线程。
可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。
一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来。
public class TestPipe { public static void main(String args[]) throws IOException{ PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(); //连接 pis.connect(pos); //或者pos.connect(pis); //PipedOutputStream pos = new PipedOutputStream(pis); new Thread(new WriteThread(pos)).start(); new Thread(new ReadThread(pis)).start(); } } class WriteThread implements Runnable{ PipedOutputStream pos; public WriteThread(PipedOutputStream pos) { this.pos=pos; } @Override public void run() { try { Thread.sleep(2000); pos.write("write data".getBytes()); pos.close(); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class ReadThread implements Runnable{ PipedInputStream pis; public ReadThread(PipedInputStream pis) { this.pis=pis; } @Override public void run() { byte[] buf = new byte[1024]; try { int len = pis.read(buf); //read会阻塞,等待pipe的数据 String s = new String(buf, 0, len); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- 【转】推荐一款Java反编译器,比较好用
- 随笔笔记三——关于SpringMVC接收请求参数和向页面传递参数
- Java实现Mysql数据库自动备份
- 使用JNI实现Java与C之间传递数据
- Realm Java 简明教程(1)
- java栈--后进先出(顺序栈、链栈、单词逆序)
- JavaBean是什么
- Maven在Eclipse中的实用小技巧
- java 设计模式之六大原则
- Java迭代foreach详解(java.util.ConcurrentModificationException的原因)
- java实现无向图的深度优先搜索和广度优先搜索
- 在运行时使用反射分析对象
- JAVA-数据库Date格式在前台JSP页面的获取
- 【Java】深夜代码祭(2)
- java中常用算法—二分法查找
- Java中关于时区的哪些事
- JAVA进行基础的文件IO读写
- Java注解@Retention&@Inherited@Target@IntDef@Documented
- 初试spark java WordCount
- SpringMVC解决GET请求时中文乱码的问题