系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream
生活随笔
收集整理的這篇文章主要介紹了
系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄:系統學習 Java IO---- 目錄,概覽
PipedInputStream 類使得可以作為字節流讀取管道的內容。 管道是同一 JVM 內的線程之間的通信通道。
使用兩個已連接的管道流時,要為每個流操作創建一個線程,
read() 和 write() 都是阻塞方法,如果一個線程同時讀寫就會造成死鎖
看一個例子:
public class Pipe {public static void main(String[] args) throws IOException {final PipedOutputStream output = new PipedOutputStream();final PipedInputStream input = new PipedInputStream(output);// 寫線程,創建匿名 Runnable 對象Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {try {output.write("Hello Pipe".getBytes());} catch (IOException e) {e.printStackTrace();}}});// 讀線程,用一下 Lambda 表達式創建匿名 Runnable 對象Thread thread2 = new Thread(() -> {try {int data = input.read();while (data != -1) {System.out.print((char) data);data = input.read();}System.out.println();} catch (IOException e) {e.printStackTrace();}});thread1.start();thread2.start();} }這里通過利用構造方法來直接指定管道輸入流的管道輸出流。
PipedInputStream input = new PipedInputStream(output);
也可以使用 pipe1.connect(pipe2) 來連接兩個管道流,例如:
PipedInputStream pis = new PipedInputStream(); pis.connect(pos);
除了管道之外,還有許多其他方法可以在同一個 JVM 中進行通信。
事實上,線程更經常交換完整的對象而不是原始的字節數據。
但是如果需要在線程之間交換原始字節數據,Java IO 的管道是能做到的。
轉載于:https://www.cnblogs.com/czwbig/p/10011870.html
總結
以上是生活随笔為你收集整理的系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.2 - 列表练习题
- 下一篇: import