This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:byte_streams [2015/03/10 11:19] gthanos |
java:byte_streams [2016/02/15 12:22] gthanos [Χρησιμοποιώντας Byte Streams] |
||
---|---|---|---|
Line 3: | Line 3: | ||
Τα προγράμματα χρησιμοποιούν **byte streams** για να εκτελέσουν είσοδο και έξοδο bytes των 8-bit. Όλες οι κατηγορίες byte stream είναι απόγονοι των **InputStream** και **OutputStream**. | Τα προγράμματα χρησιμοποιούν **byte streams** για να εκτελέσουν είσοδο και έξοδο bytes των 8-bit. Όλες οι κατηγορίες byte stream είναι απόγονοι των **InputStream** και **OutputStream**. | ||
- | Υπάρχουν πολλές byte stream κλάσεις. Για να δείξουμε πώς δουλεύουν τα byte streams , θα επικεντρωθούμε στα **I / O byte streams**, **FileInputStream** και **FileOutputStream**. Άλλα είδη byte streams χρησιμοποιούνται με τον ίδιο τρόπο και διαφέρουν κυρίως στον τρόπο που κατασκευάζονται. | + | Υπάρχουν πολλές byte stream κλάσεις. Για να δείξουμε πώς δουλεύουν τα byte streams , θα επικεντρωθούμε στα **I / O byte streams**, **[[http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html|FileInputStream]]** και **[[http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html|FileOutputStream]]**. Άλλα είδη byte streams χρησιμοποιούνται με τον ίδιο τρόπο και διαφέρουν κυρίως στον τρόπο που κατασκευάζονται. |
==== Χρησιμοποιώντας Byte Streams ==== | ==== Χρησιμοποιώντας Byte Streams ==== | ||
- | Θα εξερευνήσουμε τα FileInputStream και FileOutputStream εξετάζοντας ένα παράδειγμα προγράμματος που ονομάζεται [[CopyBytes]], το οποίο χρησιμοποιεί byte streams για να αντιγράψει το [[xanadu.txt]], ένα byte τη φορά. | + | Θα εξερευνήσουμε τα FileInputStream και FileOutputStream εξετάζοντας ένα παράδειγμα προγράμματος που ονομάζεται //CopyBytes//, το οποίο χρησιμοποιεί byte streams για να αντιγράψει το [[xanadu.txt]], ένα byte τη φορά. |
<code java CopyBytes.java> | <code java CopyBytes.java> | ||
Line 40: | Line 40: | ||
</code> | </code> | ||
- | To //CopyBytes// περνάει τον περισσότερο χρόνο του σε ένα απλό βρόχο που διαβάζει το ρεύμα εισόδου και γράφει το ρεύμα εξόδου, ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα. | + | Η μέθοδος main της κλάσης //CopyBytes// περνάει τον περισσότερο χρόνο επεξεργασίας μέσα σε ένα βρόχο που διαβάζει από το ρεύμα εισόδου και γράφει στο ρεύμα εξόδου, ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα. |
{{ :java:bytestream.gif |}} | {{ :java:bytestream.gif |}} | ||
Line 50: | Line 50: | ||
Ένα πιθανό σφάλμα είναι ότι το //CopyBytes// δεν μπόρεσε να ανοίξει το ένα ή και τα δύο αρχεία. Σε αυτή την περίπτωση θα παραχθεί ένα //I/O Exception//. Όταν συμβαίνει αυτό, η stream μεταβλητή που αντιστοιχεί στο αρχείο δεν αλλάζει ποτέ από την αρχική null τιμή του. Αυτός είναι ο λόγος για τον οποίο το //CopyBytes// φροντίζει ώστε κάθε stream μεταβλητή να περιέχει μια αναφορά αντικειμένου πριν από την κλήση του //close//. | Ένα πιθανό σφάλμα είναι ότι το //CopyBytes// δεν μπόρεσε να ανοίξει το ένα ή και τα δύο αρχεία. Σε αυτή την περίπτωση θα παραχθεί ένα //I/O Exception//. Όταν συμβαίνει αυτό, η stream μεταβλητή που αντιστοιχεί στο αρχείο δεν αλλάζει ποτέ από την αρχική null τιμή του. Αυτός είναι ο λόγος για τον οποίο το //CopyBytes// φροντίζει ώστε κάθε stream μεταβλητή να περιέχει μια αναφορά αντικειμένου πριν από την κλήση του //close//. | ||
- | ==== Πότε να μην χρησιμοποιείτε τα Byte Streams ==== | + | ==== Σε ποιες περιπτώσεις να μην χρησιμοποιείτε τα Byte Streams ==== |
- | Το //CopyBytes// φαίνεται σαν ένα φυσιολογικό πρόγραμμα, αλλά αποτελεί στην πραγματικότητα ένα είδος I / O χαμηλού επιπέδου που θα πρέπει να αποφεύγετε. Δεδομένου ότι το //xanadu.txt// περιέχει δεδομένα χαρακτήρων, η καλύτερη προσέγγιση είναι να χρησιμοποιήσετε [[java:character_streams|streams χαρακτήρων]], όπως αναλύεται στην επόμενη ενότητα. Υπάρχουν επίσης streams για πιο πολύπλοκους τύπους δεδομένων. Τα byte streams θα πρέπει να χρησιμοποιούνται μόνο για πιο primitive I / O. Τέλος, κάτι που πρέπει να θυμόμαστε για τα byte streams είναι ότι όλα τα άλλα είδη stream είναι βασισμένα πάνω τους. | + | Το //CopyBytes// φαίνεται σαν ένα φυσιολογικό πρόγραμμα, αλλά αποτελεί στην πραγματικότητα ένα είδος I/O χαμηλού επιπέδου που θα πρέπει να αποφεύγετε. Δεδομένου ότι το //xanadu.txt// περιέχει δεδομένα χαρακτήρων, η καλύτερη προσέγγιση είναι να χρησιμοποιήσετε [[java:character_streams|streams χαρακτήρων]], όπως αναλύεται στην επόμενη ενότητα. Υπάρχουν επίσης streams για πιο πολύπλοκους τύπους δεδομένων. Τα byte streams θα πρέπει να χρησιμοποιούνται μόνο για πιο primitive I/O. Τέλος, κάτι που πρέπει να θυμόμαστε για τα byte streams είναι ότι όλα τα άλλα είδη stream είναι βασισμένα πάνω τους. |
|Προηγούμενο: [[:java:file_io_intro | Είσοδος και έξοδος αρχείων ]]| Επόμενο: [[:java:character_streams | Streams Χαρακτήρων]] | | |Προηγούμενο: [[:java:file_io_intro | Είσοδος και έξοδος αρχείων ]]| Επόμενο: [[:java:character_streams | Streams Χαρακτήρων]] | | ||