管道用于将输出从一个程序(或线程)发送到另一个程序(或线程)的输入。 PipedInputStream必须连接到PipedOutputStream,而PipedOutputStream必须连接到PipedInputStream

以下是使用PipedInputStreamPipedOutputStream的示例。 在此示例中,一个线程将数据写入管道,另一个线程从该管道读取数据。

文件:PipedStreamExample.java -

package com.yiibai.tutorial.io;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

/**
 * @author yiibai
 * PipedStreamExample.java
 * Nov 5, 2016
 */
public class PipedStreamExample {
    public static void main(String[] args) throws IOException, InterruptedException {

        final PipedInputStream pipedInputStream=new PipedInputStream();
        final PipedOutputStream pipedOutputStream=new PipedOutputStream();

        /*Connect pipe*/
        pipedInputStream.connect(pipedOutputStream);

        /*Thread for writing data to pipe*/
        Thread pipeWriter=new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 65; i < 91; i++) {
                    try {
                        pipedOutputStream.write(i);
                        Thread.sleep(500);
                    } catch (IOException | InterruptedException e) {
                        e.printStackTrace();
                    }
                }        
            }
        });

        /*Thread for reading data from pipe*/
        Thread pipeReader=new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 65; i < 91; i++) {
                    try {
                        System.out.print((char)pipedInputStream.read());
                        Thread.sleep(1000);
                    } catch (InterruptedException | IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        /*Start thread*/
        pipeWriter.start();
        pipeReader.start();

        /*Join Thread*/
        pipeWriter.join();
        pipeReader.join();

        /*Close stream*/
        pipedOutputStream.close();
        pipedInputStream.close();

    }
}

执行上面示例代码,得到以下结果:

ABCDEFGHIJKLMNOPQRSTUVWXYZ