2015-05-16 35 views
1

我正在尝试在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()); 
    } 
} 
+0

如果你停止猫会发生什么。你印有什么东西? – Dien

回答

2

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

0

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

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