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();
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


