java:byte_streams

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

Τα προγράμματα χρησιμοποιούν **byte streams** για να εκτελέσουν είσοδο και έξοδο bytes των 8-bit. Όλες οι κατηγορίες byte stream είναι απόγονοι των **InputStream** και **OutputStream**. Υπάρχουν πολλές byte stream κλάσεις. Για να δείξουμε πώς δουλεύουν τα byte streams , θα επικεντρωθούμε στα **I / O byte streams**, **FileInputStream** και **FileOutputStream**. Άλλα είδη byte streams χρησιμοποιούνται με τον ίδιο τρόπο και διαφέρουν κυρίως στον τρόπο που κατασκευάζονται. ==== Χρησιμοποιώντας Byte Streams ==== Θα εξερευνήσουμε τα FileInputStream και FileOutputStream εξετάζοντας ένα παράδειγμα προγράμματος που ονομάζεται [[CopyBytes]], το οποίο χρησιμοποιεί byte streams για να αντιγράψει το [[xanadu.txt]], ένα byte τη φορά. <code java> import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyBytes { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("xanadu.txt"); out = new FileOutputStream("outagain.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } </code> To //CopyBytes// περνάει τον περισσότερο χρόνο του σε ένα απλό βρόχο που διαβάζει το ρεύμα εισόδου και γράφει το ρεύμα εξόδου, ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα. {{:java:bytestream.gif?400|}} ==== Πάντα να κλείνετε τα Streams ==== Το κλείσιμο ενός stream όταν δεν είναι πλέον αναγκαίo είναι πολύ σημαντικό. Τόσο σημαντικό ώστε το //CopyBytes// χρησιμοποιεί ένα //τελικό// block για να εγγυηθεί ότι και τα δύο stream θα κλείσουν ακόμα και αν παρουσιαστεί κάποιο σφάλμα. Η πρακτική αυτή βοηθά στην αποφυγή σοβαρών διαρροών πόρων. Ένα πιθανό σφάλμα είναι ότι το //CopyBytes// δεν μπόρεσε να ανοίξει το ένα ή και τα δύο αρχεία. Όταν συμβαίνει αυτό, η stream μεταβλητή που αντιστοιχεί στο αρχείο δεν αλλάζει ποτέ από την αρχική null τιμή του. Αυτός είναι ο λόγος για τον οποίο το //CopyBytes// φροντίζει ώστε κάθε stream μεταβλητή να περιέχει μια αναφορά αντικειμένου πριν από την κλήση του //close//. ==== Πότε να μην χρησιμοποιείτε τα Byte Streams ==== Το //CopyBytes// φαίνεται σαν ένα φυσιολογικό πρόγραμμα, αλλά αποτελεί στην πραγματικότητα ένα είδος I / O χαμηλού επιπέδου που θα πρέπει να αποφεύγετε. Δεδομένου ότι το //xanadu.txt// περιέχει δεδομένα χαρακτήρων, η καλύτερη προσέγγιση είναι να χρησιμοποιήσετε character streams, όπως αναλύεται στην επόμενη ενότητα. Υπάρχουν επίσης streams για πιο πολύπλοκους τύπους δεδομένων. Τα byte streams θα πρέπει να χρησιμοποιούνται μόνο για πιο primitive I / O. Τέλος, κάτι που πρέπει να θυμόμαστε για τα byte streams είναι ότι όλα τα άλλα είδη stream είναι βασισμένα πάνω τους.

java/byte_streams.1424647643.txt.gz · Last modified: 2016/02/26 11:15 (external edit)