Java - (Android) reutilizați un proces după spălare OutputStream sale

voturi
47

im încercarea de a face acest lucru pe 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 doua oară când am executa out.writeBytes (); , Am obține o IOException java: „Numărul de fișier incorect“. Aplicația mea trebuie să execute mai multe programe native, dar folosiți întotdeauna același proces. Oricine știe de ce acest lucru nu funcționează?

Întrebat 28/08/2010 la 13:01
de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Când sunați out.close(), se va apela în mod automat close()pe ouputstream a procesului.

De fiecare dată când suni p.getOutputStream()te la fel OutputStream, pe a doua utilizarea de către dvs. afară, p.getOutputStream()returnează o deja închisă OutputStream.

Practic cu codul dvs., nu într - adevăr nevoie pentru a închide primul DataOutputStream.

surse:

Publicat 28/08/2010 la 13:12
sursa de către utilizator

voturi
1

Rețineți că shell-ul nu face parte din SDK publice (rețineți că nu este documentat nicăieri în documentația SDK), astfel încât acest cod este în vigoare bazându-se pe API-uri private.

De asemenea, acest lucru vă pune în afara modelului normal de aplicare - nu avem nici o garanție ce se va întâmpla la un proces ați bifurcat și nu este gestionat de platforma. Acesta poate fi ucis în orice moment.

Aceasta este, de asemenea, un mod foarte ineficient de a face lucruri, în comparație cu ceea ce face comanda este de a face în propriul proces. Și începe un proces separat pentru o comandă nu va lăsa să facă nimic mai mult decât poți, pentru că încă mai funcționează ca uid ta.

Deci, practic ... pentru 99.99% dintre aplicații vă rugăm să nu fac acest lucru. Dacă scrieți o aplicație terminal de ... bine, bine, numai tocilari sunt de gând să aibă grijă de asta, oricum, și nu va fi de mare folos, deoarece ruleaza ca uid, dar bine. Dar, în caz contrar, vă rugăm să nu. :)

Publicat 28/08/2010 la 19:23
sursa de către utilizator

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