程序例子分为三个类,Sender(发送者),Receiver(接收者),PipedTest(测试类),以下是代码:
Sender类
import java.io.IOException;
import java.io.PipedOutputStream;
/**
* Sender线程类通过向管道写入数据
*/

public class Sender extends Thread {
     private PipedOutputStream out = new PipedOutputStream();
    //创建管道输出流对象
     public PipedOutputStream getPipedOut()
    {
         return out;
    }
    /*
     线程启动
     */
     public void run()
    {
        String s = "JAVA!";
         try
        {
            out.write(s.getBytes());   //往管道写入数据,write(byte[])方法
            System.out.println( "数据已发送,请接收!");
            out.close();
        } catch(IOException e)
        {
            e.printStackTrace();
        }
        
    }
}
Received类
import java.io.IOException;
import java.io.PipedInputStream;
/**
* Receiver线程类从管道读取数据
*/

public class Receiver extends Thread {
private PipedInputStream in = new PipedInputStream();
  //创建管道输出流对象
   public PipedInputStream getPipedIn()
  {
     return in;
  }
  
   public void run()
  {
     byte[] b = new byte[1024];
     try
    {
       int len = in.read(b);    //从管道输入流读取数据
      System.out.print( "数据已接受:");
      System.out.println( new String(b, 0 ,len)); //终端打印出已接收数据
      in.close();
    } catch(IOException e)
    {
      e.printStackTrace();
    }
    
  }
}

测试类
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
* 测试两个线程通过管道交换数据
*/

public class PipedTest {
   public static void main(String[] args){
    Sender send = new Sender();
    Receiver rec = new Receiver();
    
    PipedOutputStream out = send.getPipedOut();
    PipedInputStream in = rec.getPipedIn();
     try
    {
      out.connect(in);     //连接两个管道,in和out可以互换,会抛出异常
    } catch(IOException e)
    {
      e.printStackTrace();
    }
   /*
     启动这两个线程
    */
    send.start();
    rec.start();

  }

}