我正在尝试用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 :(得分: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);
}