java io管道简介说明
下文笔者讲述Java中io管道的简介说明,如下所示
io管道简介
Java IO管道: 为运行在同一个JVM中的两个线程提供了通信的能力 所以管道也可以作为数据源以及目标媒介 注意事项: 1.Java管道不能用于不同的JVM之间通信 2.java管道和Linux/Unix系统中的管道概念不同 3.我们可使用Java IO中的PipedOutputStream和PipedInputStream创建管道 一个PipedInputStream流应该和一个PipedOutputStream流相关联 一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来例:
package com.java265; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; /** * 测试Java io 创建管道 * 同一个jvm 的同一个进程的多个线程可以通过io管道相关联, * 当使用两个相关联的管道流时,务必将它们分配给不同的线程 * read()方法和write()方法调用时会导致流阻塞,这意味着如果你尝试在一个线程中同时进行读和写,可能会导致线程死锁。 * 用两个管道共有的connect()方法使之相关联。PipedInputStream和PipedOutputStream都拥有一个可以互相关联的connect()方法。 * */ public class PipeExample { public static void main(String[] args) throws IOException { final PipedOutputStream out = new PipedOutputStream(); final PipedInputStream input = new PipedInputStream(out);//使他们相关联 input.connect(out);//connect 相关联 Thread thread = new Thread(new Runnable() { public void run() { try { out.write("Hello Piper".getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); thread.start(); Thread thread2 = new Thread(new Runnable() { @Override public void run() { try { int a =input.read(); while(a != -1) { System.out.println((char)a); a = input.read(); } out.flush(); input.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } }); thread2.start(); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。