黑马程序员技术交流社区

标题: IO管道错误 [打印本页]

作者: 一步步    时间: 2013-11-9 19:52
标题: IO管道错误
package twenty_one;
import java.io.*;
public class Two {
        public static void main(String[] args)throws IOException {
                PipedInputStream  in=new PipedInputStream ();
                PipedOutputStream  out =new PipedOutputStream ();
                in.connect(out);
                Read r=new Read(in);
                Write w=new Write(out);
                new Thread(r).start();
                new Thread(w).start();
        }
        }
class Read implements Runnable
{
        private PipedInputStream in;
        Read(PipedInputStream i)
        {
                this.in=in;
        }
        public void run()
        {
                try
                {
                        byte[]buf=new byte[1024];
                        System.out.println("读取前..没有数据堵塞");
                        int len=in.read(buf);
                        System.out.println("读到数据..堵塞结束");
                        String s=new String(buf,0,len);
                        System.out.println(s);
                        in.close();
                }
                catch(IOException e)
                {
                        throw new RuntimeException("管道流读取失败");
                }
        }
}

class Write implements Runnable
{
        private PipedOutputStream out;
        Write(PipedOutputStream out)
        {
                this.out=out;
        }
        public void run()
        {
                try
                {
                        System.out.println("开始写入数据等待六秒后");
                        Thread.sleep(6000);//sleep释放执行权。
                out.write("pipe lai la".getBytes());
                out.close();
                }
                catch(Exception e)//
                {
                        throw new RuntimeException("管道流输出失败");
                }
        }
}


这段代码显示错误为:
Exception in thread "Thread-0" 读取前..没有数据堵塞
java.lang.NullPointerException
        at twenty_one.Read.run(Two.java:27)
        at java.lang.Thread.run(Thread.java:662)
开始写入数据等待六秒后


该怎么解决啊?


作者: 零下五度的水    时间: 2013-11-9 21:42
懒得复制代码跑了,靠目测吧:

java.lang.NullPointerException
at twenty_one.Read.run(Two.java:27)
at java.lang.Thread.run(Thread.java:662)
空指针异常,在 Read 类的 run 方法中

System.out.println("读取前..没有数据堵塞");
int len=in.read(buf);
System.out.println("读到数据..堵塞结束");
鉴于结果有第一句没有第二句,所以是 in.read(buf)出现空指针
应该是in的管道流问题,
猜想是因为你的 Write 类中
out.write("pipe lai la".getBytes());
out.close();
输出之后直接关闭导致管道连接断开,失去了数据源,可以将out.close()换成out.flush()方法试试




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2