请高手解释一下PipedInputStream的用途,例如,为什么要用它呢,什么情况下用它能带来好处。最好有个例子说服一下它的用法。

解决方案 »

  1.   

    数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能会死锁该线程。传送输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。
      

  2.   

    在Java的IO流中有一种很特殊的流就是管道流类:PipedInputStream  PipedOutputStream.这两个类的实例对象必须要通过connect方法连接.  其实看这么一个程序就知道了管道流类的使用方法.//sender.javaimport java.io.*;
    import java.util.*;
    public class sender extends Thread
    {
           PipedOutputStream out = new PipedOutputStream();
           public PipedOutputStream getOut()
            {
                return out;
           }
           public void run()
           {
                String str = "Hello,receiver ! I`m sender\n";
                 try
                 {
                      out.write(str.getBytes());
                      out.close();
                }
                 catch(Exception e)
                {
                       e.printStackTrace();
                 }
            }
    }
                                              //receiver.javaimport java.io.*;
    import java.util.*;
    public class receiver extends Thread
    {
               PipedInputStream in = new PipedInputStream();
              public PipedInputStream getIn()
               {
                      return in;
               }
               public void run()
               {
                      byte [] buf = new byte[1024];
                      try
                      {
                             int len = in.read(buf);
                            System.out.println("the following is from sender:\n"+new String(buf,0,len));
                            in.close();
                      }catch(Exception e)
                      {
                            e.printStackTrace();
                       }
                }
    }                                            //TestPiped.javaimport java.io.*;
    class TestPiped
    {
               public static void main(String [] args)
               {
                      sender s = new sender();
                     receiver r = new receiver();
                     PipedOutputStream out = s.getOut();
                      PipedInputStream in = r.getIn();
                     try
                     {
                              in.connect(out);
                             s.start();
                             r.start();
                      }
                     catch(Exception e)
                     {
                            e.printStackTrace();
                     }
               }
    }这个程序的功能是sender发送"Hello,receiver ! I`m sender"给receiver然后receiver接受后显示出来并且在前面加上"the following is from sender"的信息.要注意的就是PipedInputStream和PipedOutputStream分别用两个线程传送数据.