java:byte_streams

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:byte_streams [2015/03/10 11:46]
gthanos [Σε ποιες περιπτώσεις να μην χρησιμοποιείτε τα Byte Streams]
java:byte_streams [2016/02/15 12:23]
gthanos [Πάντα να κλείνετε τα Streams]
Line 40: Line 40:
 </​code> ​ </​code> ​
  
-To //​CopyBytes//​ περνάει τον περισσότερο χρόνο ​του ​σε ένα ​απλό ​βρόχο που διαβάζει το ρεύμα εισόδου και γράφει το ρεύμα εξόδου,​ ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα.+Η μέθοδος main της κλάσης ​//​CopyBytes//​ περνάει τον περισσότερο χρόνο ​επεξεργασίας μέσα ​σε ένα βρόχο που διαβάζει ​από ​το ρεύμα εισόδου και γράφει ​στο ρεύμα εξόδου,​ ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα.
  
 {{ :​java:​bytestream.gif |}} {{ :​java:​bytestream.gif |}}
Line 46: Line 46:
 ==== Πάντα να κλείνετε τα Streams ==== ==== Πάντα να κλείνετε τα Streams ====
  
-Το κλείσιμο ενός stream όταν δεν είναι πλέον αναγκαίo είναι πολύ σημαντικό. ​Τόσο ​σημαντικό ώστε το //​CopyBytes//​ χρησιμοποιεί ένα //​τελικό//​ block για να εγγυηθεί ότι και τα δύο stream θα κλείσουν ακόμα και αν παρουσιαστεί κάποιο σφάλμα. Η πρακτική αυτή βοηθά στην αποφυγή σοβαρών διαρροών πόρων.+Το κλείσιμο ενός stream όταν δεν είναι πλέον αναγκαίo είναι πολύ σημαντικό. ​Η κλάση //​CopyBytes//​ χρησιμοποιεί ένα //​τελικό//​ block για να εγγυηθεί ότι και τα δύο stream θα κλείσουν ακόμα και αν παρουσιαστεί κάποιο σφάλμα. Η πρακτική αυτή βοηθά στην αποφυγή σοβαρών διαρροών πόρων.
  
-Ένα πιθανό σφάλμα είναι ότι το //​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 Χαρακτήρων]] |
  
java/byte_streams.txt · Last modified: 2016/02/26 11:15 (external edit)