Java - (android) Gjenbruk en prosess etter tømming sin OutputStream

stemmer
47

Jeg prøver å gjøre dette på 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();

Den andre gangen jeg utføre out.writeBytes (); , Får jeg en java IOException: Bad fil nummer. Min app har til å utføre flere innfødte programmer, men alltid bruke den samme prosessen. Noen som vet hvorfor dette ikke fungerer?

Publisert på 28/08/2010 klokken 12:01
bruker
På andre språk...                            


2 svar

stemmer
0

Når du ringer out.close(), vil den automatisk ringe close()på ouputstream av prosessen.

Hver gang du ringer p.getOutputStream()du får den samme OutputStream, på andre bruk av ut, p.getOutputStream()returnerer en allerede lukket OutputStream.

I utgangspunktet med koden din, trenger du egentlig ikke trenger å lukke det første DataOutputStream.

kilder:

Svarte 28/08/2010 kl. 12:12
kilden bruker

stemmer
1

Merk at skallet er ikke en del av det offentlige SDK (merk det er ikke dokumentert hvor som helst i SDK dokumentasjon), så denne koden er i kraft avhengig av private APIer.

Også dette setter deg utenfor det normale programmet modell - vi har ingen garanti for hva som vil skje med en prosess du har delte og blir ikke styrt av plattformen. Det kan bli drept når som helst.

Dette er også en svært ineffektiv måte å gjøre ting, i forhold til å gjøre hva kommandoen gjør i din egen prosess. Og starte en egen prosess for en kommando vil ikke la den gjøre noe mer enn du kan, fordi det fortsatt kjører som din UID.

Så i utgangspunktet ... for 99,99% av apps du ikke gjør dette. Hvis du skriver en terminal app ... vel, ok, bare geeks kommer til å bry seg om det uansett, og det er ikke til å være av mye bruk siden den kjører som din UID, men greit. Men ellers kan du ikke. :)

Svarte 28/08/2010 kl. 18:23
kilden bruker

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