Java - (Android) riutilizzare un processo dopo il lavaggio suo OutputStream

voti
47

im cercando di fare questo su 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();

La seconda volta che eseguo out.writeBytes (); , Ottengo un IOException java: numero di file Bad. La mia app deve eseguire diversi programmi nativi, ma utilizzare sempre lo stesso processo. Chiunque sa perché questo non funziona?

È pubblicato 28/08/2010 alle 13:01
dall'utente
In altre lingue...                            


2 risposte

voti
0

Quando si chiama out.close(), si chiamerà automaticamente close()sul ouputstream del processo.

Ogni volta che si chiama p.getOutputStream()si ottiene lo stesso OutputStream, sul secondo uso di fuori, p.getOutputStream()restituisce un già chiusa OutputStream.

In sostanza con il codice, non si ha realmente bisogno di chiudere il primo DataOutputStream.

fonti:

Risposto il 28/08/2010 a 13:12
fonte dall'utente

voti
1

Si noti che la shell non fa parte del SDK pubblico (si noti che non è documentato da nessuna parte nella documentazione di SDK), in modo da questo codice è in vigore basandosi su API private.

Anche questo si pone al di fuori del modello normale applicazione - non abbiamo alcuna garanzia che cosa accadrà ad un processo si è biforcuta e non è gestito dalla piattaforma. Si può ottenere ucciso in qualsiasi momento.

Questo è anche un modo molto inefficiente di fare le cose, rispetto a fare tutto ciò che il comando sta facendo nel proprio processo. E a partire un processo separato per un comando non lasciar fare qualcosa di più che è possibile, perché si corre ancora come uid.

Quindi, in pratica ... per il 99,99% delle applicazioni per favore non fare questo. Se si sta scrivendo un'applicazione terminale ... bene, va bene, solo geek stanno andando a preoccuparsi che in ogni caso, e non sta per essere di grande utilità poiché funziona come uid, ma va bene. Ma per il resto, per favore no. :)

Risposto il 28/08/2010 a 19:23
fonte dall'utente

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