4.3 Pipe
Java 管道Pipe是用于執行緒間通信的,但是需要注意的是,Java中的Pipe是用于一個虛擬機中的執行緒之間通信的,不能用于行程之間通信, Java管道和Unix/Linux中的管道Pipe的作用是不同的,Unix/Linux中的管道是用于行程之間通訊,是不同Process之間,而Java是同一個虛擬機里的執行緒之間通訊,屬于同一個Program,
Java中Pipe分為了兩個型別,字符流和位元組流,二者又分為輸入流和輸出流,輸出流是發送訊息,輸入流是接收訊息,
| 位元組流輸出 | 位元組輸入 | 字符輸出 | 字符輸入 |
|---|---|---|---|
| PipedOutputStream | PipedInputStream | PipedWriter | PipedReader |
4.3.1 Java 位元組流Pipe管道用法
創建輸出流管道,
final PipedOutputStream output = new PipedOutputStream();
創建輸入流管道,構造引數為輸出流實列,
final PipedOutputStream output = new PipedOutputStream();
final PipedInputStream input = new PipedInputStream(output);
Thread thread1 = new Thread(()-> {
try {
output.write("Hello world, pipe!".getBytes());
System.err.println(Thread.currentThread().getName()+"已輸出!");
} catch (IOException ignored) {
}
});
Thread thread2 = new Thread(()-> {
try {
int data = input.read();
System.err.println(Thread.currentThread().getName());
while(data != -1){
System.out.print((char) data);
data = input.read();
}
} catch (IOException e) {
}
});
thread1.start();
thread2.start();
4.3.2 Java 字符流Pipe管道用法
創建字符流輸出流管道,
PipedWriter pipedWriter = new PipedWriter();
創建字符流輸入流管道,
PipedReader pipedReader = new PipedReader(pipedWriter);
完整實體,
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader(pipedWriter);
new Thread(()->{
try {
pipedWriter.write("pipedWriter write msg!");
} catch (IOException e) {
e.printStackTrace();
}
}).start();
new Thread(()->{
char[] str = new char[1024];
try {
pipedReader.read(str);
System.err.println(new String(str));
} catch (IOException e) {
e.printStackTrace();
}
}).start();
4.3.3 Pipe總結
- Java中管道作用于一個Jvm,作業系統管道作用于行程之間,
- 管道輸出流是發送訊息,輸入流是接收訊息,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/262194.html
標籤:java
上一篇:IO流常用小知識
下一篇:深入了解java中的包和繼承
