パイプ入力フローPipedInputStream
パイプ入力ストリームは、パイプ出力ストリームからデータを読み出します.通常、1つのスレッドからパイプにストリーム書き込みデータが出力され、別のスレッドからパイプ入力ストリームからデータが読み出され、2つのスレッドはパイプで通信することができる.スレッドAがパイプ入力ストリームのread()メソッドを実行すると、一時的にデータがない場合、このスレッドはブロックされ、スレッドBがパイプにストリームを出力して新しいデータを書いた場合にのみ、スレッドAが実行を再開します.次に例を示します
Senderクラス
Receiverクラス
スレッドSenderはパイプ出力ストリームにバイトを書き込み、スレッドReceiverはパイプ入力ストリームからバイトを読み出す.スレッドSenderが出力するバイトシーケンスは、スレッドReceiverが読み込んだバイトシーケンスと同じです.
Senderクラス
package xiaohang.com;
import java.io.PipedOutputStream;
/** */
class Sender extends Thread {
private PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getPipedOutputStream() {
return out;
}
@Override
public void run() {
try {
for (int i = -127; i < 128; i++) {
out.write(i);
//
yield();
}
// 。
out.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Receiverクラス
package xiaohang.com;
import java.io.IOException;
import java.io.PipedInputStream;
/** */
public class Receiver extends Thread {
private PipedInputStream in;
public Receiver(Sender sender) throws IOException {
// PipedOutputStream ,
// IOException
in = new PipedInputStream(sender.getPipedOutputStream());
}
@Override
public void run() {
try {
int data;
while ((data = in.read()) != -1)
System.out.println(data);
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String args[]) throws Exception {
Sender sender = new Sender();
Receiver receiver = new Receiver(sender);
sender.start();
receiver.start();
}
}
スレッドSenderはパイプ出力ストリームにバイトを書き込み、スレッドReceiverはパイプ入力ストリームからバイトを読み出す.スレッドSenderが出力するバイトシーケンスは、スレッドReceiverが読み込んだバイトシーケンスと同じです.