Java - (android) Επαναχρησιμοποίηση μια διαδικασία μετά την έξαψη OutputStream της

ψήφοι
47

im προσπαθεί να κάνει αυτό για το 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();

Η δεύτερη φορά που εκτελεί out.writeBytes ()? , Να πάρω ένα IOException java: Bad αριθμό αρχείων. app μου έχει να εκτελέσει πολλά εγγενή προγράμματα, αλλά χρησιμοποιείτε πάντα την ίδια διαδικασία. Όποιος γνωρίζει γιατί αυτό δεν λειτουργεί;

Δημοσιεύθηκε 28/08/2010 στις 13:01
χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Όταν καλείτε out.close(), θα καλέσει αυτόματα close()στο ouputstream της διαδικασίας σας.

Κάθε φορά που καλείτε p.getOutputStream()θα έχετε το ίδιο OutputStream, σε δεύτερη χρήση σας έξω, p.getOutputStream()επιστρέφει μια ήδη κλείσει OutputStream.

Ουσιαστικά με τον κωδικό σας, πραγματικά δεν χρειάζεται να κλείσει το πρώτο DataOutputStream.

Πηγές :

Απαντήθηκε 28/08/2010 στις 13:12
πηγή χρήστη

ψήφοι
1

Να σημειωθεί ότι το κέλυφος δεν αποτελεί μέρος της δημόσιας SDK (σημειώστε ότι δεν τεκμηριώνεται πουθενά στην τεκμηρίωση SDK), έτσι ώστε αυτός ο κώδικας είναι στην πραγματικότητα βασίζεται σε ιδιωτικές APIs.

Επίσης, αυτό σας βάζει έξω από το κανονικό μοντέλο εφαρμογής - δεν έχουμε καμία εγγύηση για το τι θα συμβεί σε μια διαδικασία που έχετε διχαλωτή και δεν διαχειρίζεται από την πλατφόρμα. Μπορεί να σκοτωθούμε ανά πάσα στιγμή.

Αυτό είναι επίσης ένας πολύ αναποτελεσματικός τρόπος για να κάνουμε τα πράγματα, σε σύγκριση με ό, τι κάνει η εντολή κάνει στη δική σας διαδικασία. Και ξεκινώντας μια ξεχωριστή διαδικασία για μια εντολή που δεν θα το αφήσει να κάνει τίποτα περισσότερο από ό, τι μπορείτε, επειδή εξακολουθεί να λειτουργεί ως UID σας.

Έτσι, βασικά ... για το 99,99% των εφαρμογών παρακαλώ μην το κάνετε αυτό. Αν γράφετε ένα τερματικό app ... καλά, εντάξει, μόνο geeks θα φροντίσει γι 'αυτό έτσι κι αλλιώς, και δεν πρόκειται να είναι πολύ χρήσιμη, δεδομένου ότι λειτουργεί ως uid σας, αλλά εντάξει. Αλλά κατά τα άλλα, παρακαλώ όχι. :)

Απαντήθηκε 28/08/2010 στις 19:23
πηγή χρήστη

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