我正在用Java编写一个程序,它将命令发送到C程序并读取其输出,但是当我尝试实际读取输出时,我看到它挂起。 代码是:
import java.io.*;
public class EsecutoreC {
private String prg;
OutputStream stdin=null;
InputStream stderr=null;
InputStream stdout=null;
BufferedReader br;
Process pr;
public EsecutoreC(String p){
prg=p;
try {
pr=Runtime.getRuntime().exec(prg);
stdin=pr.getOutputStream();
stderr=pr.getErrorStream();
stdout=pr.getInputStream();
br=new BufferedReader(new InputStreamReader(stdout));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendInput(String line){
line=line+"\n";
try {
stdin.write(line.getBytes());
stdin.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public BufferedReader getOutput(){
return br;
}
}
当我需要读取程序的输出时,我只需使用getOutput来获取BufferedReader,然后调用readLine()。我看到该程序挂起,因为我在调用readLine之后立即放入了println并且没有打印出来。我还在C程序的每一行输出后添加\ n。 另外,有没有办法显示通过Runtime.getRuntime()。exec()调用的程序窗口?所以当我向它发送字符串或从输出中读取时,我可以检查是否有任何其他问题。
答案 0 :(得分:0)
当您调用readLine()
时,BufferedReader将阻塞,直到输出中出现新的行字符'\n'
。尝试从终端/命令行调用C程序,看看输出是否真的终止于新行。
或者你可以一次只read(1)
一个字符(然后不需要BufferedReader
)并立即打印。
编码不会影响'\n'
字符。