android-common icon indicating copy to clipboard operation
android-common copied to clipboard

执行commands有问题

Open Chersh-Pan opened this issue 10 years ago • 8 comments

for (String command : commands) { if (command == null) { continue; }

            // donnot use os.writeBytes(commmand), avoid chinese charset error
            os.write(command.getBytes());
            os.writeBytes(COMMAND_LINE_END);
            os.flush();
        }

当传入的commands数组过大,os write将近64M的字节时会出现错误

Chersh-Pan avatar Apr 28 '15 12:04 Chersh-Pan

64K的数据

Chersh-Pan avatar Apr 28 '15 13:04 Chersh-Pan

是指 command.getBytes() 很大? 具体什么错误?OOM?

Trinea avatar Apr 28 '15 15:04 Trinea

os.write的数据不能超过64K,也就是如果commands数组过大就会出现错误

Chersh-Pan avatar Apr 29 '15 02:04 Chersh-Pan

没拿这么大的数据测试过,什么场景要这么多命令,分开执行不行吗

Trinea avatar Apr 29 '15 02:04 Trinea

可以也可以,只是这个存在这个问题

Chersh-Pan avatar Apr 29 '15 02:04 Chersh-Pan

ok,没时间细看这个问题,你有时间的话,也可以提交 PR 修复这个问题

Trinea avatar Apr 29 '15 04:04 Trinea

主要是process.getOutputStream()这个流有限制大小,改不了吧

Chersh-Pan avatar Apr 29 '15 09:04 Chersh-Pan

发现常常死等在waitfor 我看别人都是写成线程的异步 new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
try {
String line2 = null ;
while ((line2 = br2.readLine()) != null ) {
if (line2 != null){}
}
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
is2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();

是不是那样处理就会更好点?

ComeOn-Wuhan avatar Mar 30 '16 04:03 ComeOn-Wuhan