该程序的问题是实时工作的。
例如: getevent
但是当我尝试读取来自进程的数据时,exec 给他们的部分至少 4096 字节!
例如:
- 如果 getevent 返回1000 字节的文本: stdout.available () == 0
- 如果 getevent 返回4000 字节的文本: stdout.available () == 0
- 如果 getevent 返回 4096 字节的文本: stdout.available () == 4096
- 如果 getevent 返回 8192 字节的文本: stdout.available () == 8192
- 如果 getevent 返回10000 字节的文本: stdout.available () == 8192
如果使用 stdout.read() 该函数将等到 4096*n 字节或直到 getevent 关闭。
如何读取实时到来的数据,而不是等到 4096 字节才会被拨出?
Process p = Runtime.getRuntime().exec(new String[]{"su", "-c", "system/bin/sh"});
DataOutputStream stdin = new DataOutputStream(p.getOutputStream());
stdin.writeBytes("getevent\n");
InputStream stdout = p.getInputStream();
byte[] buffer = new byte[1];
int read;
String out = new String();
while(true){
read = stdout.read(buffer);
out += new String(buffer, 0, read);
System.out.println("MYLOG: "+(new String(buffer, 0, read)));
}
我发现这在文档中有所改进!
将 InputStream 复制到 OutputStream 中,直到到达流的末尾。此方法使用 4096 kbyte 的缓冲区。
>>文档