import java.io.*;
public class PipedStreamTest {
    
    /** Creates a new instance of PipedStreamTest */
    
    public static void main(String [] args){
        Sender t1 = new Sender();
        Receiver t2 = new Receiver();
        try{
            PipedOutputStream out =t1.getPipedOutputStream();
            PipedInputStream in = t2.getPipedInputStream();
            in.connect(out);
            t1.start();
            t2.start();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
//class Receiver
public class Receiver extends Thread{
    
    /** Creates a new instance of Receiver */
    private PipedInputStream in = new PipedInputStream();
    byte [] buf = new byte[1024];
    int len = 0;
    public PipedInputStream getPipedInputStream(){
        return in;
    }
    public void run(){
        try{
            PipedInputStream in = new PipedInputStream();
            len = in.read(buf);
            System.out.println("the fllowing content is :" + new String(buf,0,len));
            in.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}//class Sender
public class Sender extends Thread{
    
    /** Creates a new instance of Sender */
    private PipedOutputStream out = new PipedOutputStream();
    public PipedOutputStream getPipedOutputStream(){        
         return out;
    }
    public void run(){
        try{
        PipedOutputStream out = new PipedOutputStream();
        out.write("hello,received".getBytes());
        out.close();       
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
}

解决方案 »

  1.   

    那肯定啊,你代码有问题啊,要是能连接,那就是JVM的bug了,知道为什么吗?因为你的线程类复写了PipedOutputStream变量,看看吧:
    //class Sender
    public class Sender extends Thread{
        
        /** Creates a new instance of Sender */
        private PipedOutputStream out = new PipedOutputStream();
        public PipedOutputStream getPipedOutputStream(){        
             return out;
        }
        public void run(){
            try{
            //谁让你这么写,你这样就覆盖了私有变量out,把下面这行注释掉
            //PipedOutputStream out = new PipedOutputStream();
            out.write("hello,received".getBytes());
            //不要着急关闭,如果那面还没收完,就会有错误啊哥们儿!在外面关闭
            //out.close();       
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        
    }
    你的PipedInputStream也存在同样问题!!!