java.lang.Process清空缓冲区问题,普通信息和错误信息都要能及时清除要怎么弄
方法1:如果有普通信息,就清普通信息,如果没有则判断和清理错误信息,都没有则判断是否已结束
问题:发现如果程序即有普通信息,又有错误信息,会一直清理普通信息,不管错误信息,错误信息多了有可能会导致缓冲区爆掉
方法2:每次循环都会判断和清理普通信息和错误信息
问题:如果没错误信息,代码运行时会一直停在scErrOut.hasNextLine()里,如果不判断直接nextLine,也是同样的停止,直到进程结束,这样普通信息的缓冲一直没清理,有可能导致普通信息过多爆掉
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
**
* 阻塞(自动清理输出缓冲区)
* @param p
* @return
* @throws IOException
*/
public static String waitFor(Process p) throws IOException{
String str = null;
InputStream is1 = p.getInputStream();
InputStream is2 = p.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is1));
while (true) {
boolean exitFlag = true;
if (is1.available() > 0) {
Character c = new Character( (char) is1.read());
System.out.print(c);
exitFlag = false;
}
if (is2.available() > 0) {
Character c = new Character( (char) is2.read());
System.out.print(c);
exitFlag = false;
}
if(exitFlag){
try {
Thread.sleep(100); // Nothing to do, sleep a while...
p.exitValue(); // ThrowIllegalThreadStateException, if the subprocess represented by this Process object has not yet terminated.
break;
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (IllegalThreadStateException ex) {
// Process still alive
}
}
}
br.close();
is1.close();
p.destroy();
return str;
}