管道流用于线程之间的通信。
PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据.
一个线程的PipedInputStream对象从另外一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。
一共有两种方式实现管道流:
方法1 : 使用Connect进行连接
写入管道:
- 代码
- import java.io.IOException;
- import java.io.PipedOutputStream;
- public class Producer extends Thread {
- private PipedOutputStream pos;
- public Producer(PipedOutputStream pos) {
- this.pos = pos;
- }
- @Override
- public void run() {
- super.run();
- try {
- pos.write("Hello".getBytes());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- 代码
- import java.io.IOException;
- import java.io.PipedInputStream;
- public class Consumer extends Thread {
- private PipedInputStream pis;
- public Consumer(PipedInputStream pis) {
- this.pis = pis;
- }
- @Override
- public void run() {
- super.run();
- byte[] b = new byte[100]; // 将数据保存在byte数组中
- try {
- int len = pis.read(b); // 从数组中得到实际大小。
- System.out.println(new String(b, 0, len));
- pis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
Main:
- PipedStreamTest
- import java.io.IOException;
- import java.io.PipedInputStream;
- import java.io.PipedOutputStream;
- public class PipedStreamTest {
- public static void main(String[] args) {
- PipedOutputStream pos = new PipedOutputStream();
- PipedInputStream pis = new PipedInputStream();
- try {
- pos.connect(pis);// 连接管道
- new Producer(pos).start();// 启动线程
- new Consumer(pis).start();// 启动线程
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- 代码
- import java.io.IOException;
- import java.io.PipedInputStream;
- public class Consumer extends Thread {
- private PipedInputStream pis;
- public Consumer(PipedInputStream pis) {
- this.pis = pis;
- }
- @Override
- public void run() {
- super.run();
- byte[] b = new byte[100]; // 将数据保存在byte数组中
- try {
- int len = pis.read(b); // 从数组中得到实际大小。
- System.out.println(new String(b, 0, len));
- pis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
Main:
- PipedStreamTest
- import java.io.IOException;
- import java.io.PipedInputStream;
- import java.io.PipedOutputStream;
- public class PipedStreamTest {
- public static void main(String[] args) {
- PipedOutputStream pos = new PipedOutputStream();
- PipedInputStream pis = new PipedInputStream();
- try {
- pos.connect(pis);// 连接管道
- new Producer(pos).start();// 启动线程
- new Consumer(pis).start();// 启动线程
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }