java get请求清除缓存,java.lang.Process清空缓冲区问题,getInputStream和getErrorStream都要能及时清除要怎么弄...

java.lang.Process清空缓冲区问题,getInputStream和getErrorStream都要能及时清除要怎么弄0

00e27ab806e4881f8254fe7ae8741834.pngyjlzero2015.02.09浏览64次分享举报

方法1:如果有普通信息,就清普通信息,如果没有则判断和清理错误信息,都没有则判断是否已结束

问题:发现如果程序即有普通信息,又有错误信息,会一直清理普通信息,不管错误信息,错误信息多了有可能会导致缓冲区爆掉

while (true) {

if (scStdOut.hasNextLine()) {

System.out.println(scStdOut.nextLine()); // Standard Output Information

exitFlag = false;

}else if (scErrOut.hasNextLine()) {

System.err.println(scErrOut.nextLine()); // Error Information

exitFlag = false;

}

if(exitFlag){

try {

Thread.sleep(20); // 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

}

}

}

方法2:每次循环都会判断和清理普通信息和错误信息

问题:如果没错误信息,代码运行时会一直停在scErrOut.hasNextLine()里,如果不判断直接nextLine,也是同样的停止,直到进程结束,这样普通信息的缓冲一直没清理,有可能导致普通信息过多爆掉

while (true) {

if (scStdOut.hasNextLine()) {

System.out.println(scStdOut.nextLine()); // Standard Output Information

exitFlag = false;

}

if (scErrOut.hasNextLine()) {

System.err.println(scErrOut.nextLine()); // Error Information

exitFlag = false;

}

//下面代码同方法1一样,省略掉

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值