Java:在读取进程的InputStream之前等待进程的子进程完成

时间:2017-01-28 07:03:13

标签: java android inputstream

我创建的流程如下:

Process p = Runtime.getRuntime().exec(new String[]{"su"});

在我的程序中,我只想创建一次此过程。我正在为Android开发一个根文件资源管理器应用程序,每当创建此过程时,Android设备将提示用户授予root权限。这是一个非常慢的操作,因为这是一个文件浏览器,它经常需要root权限。所以,我决定创建一次这个进程,并以下面的方式将命令写入其OutputStream(stdin就是这个OutputStream):

stdin.writeBytes(command + "\n");

在我可以阅读命令的输出之前,我需要我的程序等到 writeBytes 写的命令终止。我试过{ {1}},但这导致程序挂起。

以下是我从InputStream读取字节的方法:

p.waitFor()

请注意,虽然int read; String out = ""; stdout = p.getInputStream(); byte[] buffer = new byte[262144]; while (true) { read = stdout.read(buffer); out += new String(buffer, 0, read); if (read < BUFF_LEN) { //we have read everything break; } } 方法在输入数据可用之前会阻塞,但在这种情况下它不会阻塞,因为它认为它已到达InputStream的末尾。

我试图在这篇文章中仅包含我的代码的相关部分,但如果您想查看包含它的类的完整源代码,请参阅此处:http://pastebin.com/t6JdWmQr

如何在读取进程'InputStream?

之前确保命令已完成运行

1 个答案:

答案 0 :(得分:0)

我也遇到过类似的问题,我在这里找到答案: Wait until a command in su finishes

如果在这个shell进程中不需要任何读取流,只需添加shell读取流即可完成shell进程。

或者在XDA中也有更好的方法: [HowTo]Execute Root Commands and read output