Java管道流PipeInputStream与PipeOutputStream

来源:互联网 发布:java log4j.xml 编辑:程序博客网 时间:2024/06/06 05:09

● 管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。

● PipedStreamDemo

class Read implements Runnable {private PipedInputStream in;Read(PipedInputStream in) {this.in = in;}public void run() {try {byte[] buf = new byte[1024];System.out.println("读取前......没有数据......阻塞");int len = in.read(buf);System.out.println("读到数据......阻塞结束");String s = new String(buf, 0, len);System.out.println(s);in.close();} catch (IOException e) {throw new RuntimeException("管道读取流失败");}}}class Write implements Runnable {private PipedOutputStream out;Write(PipedOutputStream out) {this.out = out;}public void run() {try {System.out.println("开始写入数据,等待6秒后。");Thread.sleep(6000);out.write("piped lai la".getBytes());out.close();} catch (Exception e) {throw new RuntimeException("管道输出流失败");}}}class PipedStreamDemo {public static void main(String[] args) throws IOException {PipedInputStream in = new PipedInputStream();PipedOutputStream out = new PipedOutputStream();in.connect(out);Read r = new Read(in);Write w = new Write(out);new Thread(r).start();new Thread(w).start();}}