java-ProcessBuilder不会停止
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-ProcessBuilder不会停止,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1747字,纯文字阅读大概需要3分钟。
内容图文
![java-ProcessBuilder不会停止](/upload/InfoBanner/zyjiaocheng/693/1bbfc1c4d7644ffcb8f6ca02e3bc6989.jpg)
我正在尝试使用Linux下的ProcessBuilder类将mp3文件解码为wav文件.由于某些原因,该过程不会停止,因此我必须手动取消它.
有人可以给我一个提示.我认为引用的代码很容易重现:
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
Process lameProcess = new ProcessBuilder("lame", "--decode", "test.mp3", "-").start();
InputStream is = lameProcess.getInputStream();
FileOutputStream fileOutput = new FileOutputStream("test.wav");
DataOutputStream dataOutput = new DataOutputStream(fileOutput);
byte[] buf = new byte[32 * 1024];
int nRead = 0;
int counter = 0;
while((nRead = is.read(buf)) != -1) {
dataOutput.write(buf, 0, buf.length);
}
is.close();
fileOutput.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
jstack的输出
"main" prio=10 tid=0x0000000002588800 nid=0x247a runnable [0x00007f17e2761000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:236)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
- locked <0x00000000eb5b1660> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at Test.main(Test.java:17)
解决方法:
您需要清空进程的输出(通过getInputStream())和错误(通过getErrorStream())流,否则可能会阻塞.
Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.
(适用于错误流和输出流)
您可能需要在不同的线程中耗尽每个流,因为每个流在没有数据时可能会阻塞.
内容总结
以上是互联网集市为您收集整理的java-ProcessBuilder不会停止全部内容,希望文章能够帮你解决java-ProcessBuilder不会停止所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。