目錄:系統學習 Java IO---- 目錄,概覽html
PipedInputStream 類使得能夠做爲字節流讀取管道的內容。 管道是同一 JVM 內的線程之間的通訊通道。java
使用兩個已鏈接的管道流時,要爲每一個流操做建立一個線程,
read() 和 write() 都是阻塞方法,若是一個線程同時讀寫就會形成死鎖ide
看一個例子:學習
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() { @Override public 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);
code
除了管道以外,還有許多其餘方法能夠在同一個 JVM 中進行通訊。
事實上,線程更常常交換完整的對象而不是原始的字節數據。
可是若是須要在線程之間交換原始字節數據,Java IO 的管道是能作到的。htm