Java - (android) Reúso um processo após a lavagem seu OutputStream

votos
47

im tentando fazer isso no Android:

Process p = Runtime.getRuntime().exec(sh);

   DataOutputStream out = new DataOutputStream(p.getOutputStream());

   out.writeBytes(something useful\n);

   out.close();

   p.waitFor();

   out = new DataOutputStream(p.getOutputStream());

   out.writeBytes(something useful\n);

   out.close();

   p.waitFor();

A segunda vez que executar out.writeBytes (); , Eu recebo um IOException java: número do arquivo Bad. Meu aplicativo tem de executar vários programas nativos, mas sempre usar o mesmo processo. Alguém sabe por que isso não funciona?

Publicado 28/08/2010 em 13:01
usuário
Em outras línguas...                            


2 respostas

votos
0

Quando você ligar out.close(), ele irá chamar automaticamente close()no ouputstream do seu processo.

Cada vez que você chamar p.getOutputStream()você obtém o mesmo OutputStream, em seu segundo uso para fora, p.getOutputStream()retorna uma já fechada OutputStream.

Basicamente com o seu código, você realmente não precisa fechar o primeiro DataOutputStream.

Fontes :

Respondeu 28/08/2010 em 13:12
fonte usuário

votos
1

Note-se que a casca não é parte do SDK público (note que não é documentado em qualquer lugar na documentação do SDK), de modo que este código está em vigor depender de APIs privadas.

Além disso, este coloca fora do modelo de aplicação normal - temos nenhuma garantia de que vai acontecer com um processo que você bifurcada e não está a ser gerido pela plataforma. Pode ser morto a qualquer momento.

Esta é também uma maneira muito ineficiente para fazer as coisas, em comparação a fazer o que o comando está fazendo em seu próprio processo. E iniciar um processo separado para um comando não vai deixá-lo fazer algo mais do que você pode, porque ele ainda funciona como seu uid.

Então, basicamente ... para 99,99% dos aplicativos, por favor, não faça isso. Se você estiver escrevendo um aplicativo de terminal de ... bem, tudo bem, apenas os geeks vão se importar com isso de qualquer maneira, e não vai ser de muita utilidade, uma vez que funciona como seu uid, mas tudo bem. Mas por outro lado, por favor não. :)

Respondeu 28/08/2010 em 19:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more