如何在不实际写入数据的情况下清空Java中的缓冲区?

时间:2013-10-03 08:45:48

标签: java process runtime bufferedreader

我正在尝试编写一个Java程序,它将在Windows命令提示符下执行一行代码。我想使用外部程序(7-Zip)来提取一些RAR文件(它比这更复杂,但对于手头的问题无关紧要。)

我获得了Runtime实例并使用了.exec()方法。当我尝试自己提取一个存档时它工作正常,但是当我尝试同时提取多个存档时,进程被挂起并且.waitFor()永远不会返回。

我研究了这个问题,并认为它是由该过程产生的输出引起的。似乎某些缓冲区或其他缓冲区正在填满并锁定程序。我被概述了here。我实现了这个解决方案(除了我使用了一个imput流并将它指向一个文件),它确实有效。但是,编写所有完全不必要的输出似乎需要花费很多额外的时间。

我想知道是否有办法欺骗BufferedReader认为它已写入其缓冲区中的所有内容而不实际编写它?

感谢您一直读到最底层!

1 个答案:

答案 0 :(得分:1)

这不是挂起的Java部分,它是本机应用程序,当它无法再写出输出时会阻塞。

既然您已经拥有使其在Java中运行的代码,为什么不坚持使用它?

下一个最佳选择是使外部进程不产生任何输出。也许有一个“沉默”的旗帜?在Linux上,你也可以管道到/ dev / null,不确定是否Windows has an equivalent(我想你可以管道进入文件)。