从管道到另一个进程的InputStream仍然被阻止

时间:2015-05-16 04:19:42

标签: java pipe

我正在尝试用Java做一些基本的管道。我写了一个非常简单的测试程序,但是代码在while循环中一直被阻塞,因为似乎没有来自cat的stdout的输入。哪个部分我做错了?

public static void main(String[] arguments) throws Exception{
    Process p=Runtime.getRuntime().exec("cat");
    PrintStream out=new PrintStream(p.getOutputStream());
    Scanner in=new Scanner(p.getInputStream());
    out.println("hello");
    while(in.hasNextLine()){
        System.out.println(in.nextLine());
    }
}

2 个答案:

答案 0 :(得分:2)

默认情况下PrintStream不会自动刷新。您可以使用new PrintStream(p.getOutputStream(), true);构建它来启用autoFlush,或者在out.flush()之后添加对out.println("hello");的调用,以便在写入后手动刷新字符串。导致in读取您打印到out的内容。

答案 1 :(得分:0)

in.hasNextLine()需要行尾,这可能是问题所在。尝试以下工作

    InputStream in = p.getInputStream();
    for (int c;(c=in.read())!= -1;) {
        System.out.print((char)c);
    }