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
java:byte_streams [2015/02/22 23:40]
elkarafe [Πότε να μην χρησιμοποιείτε τα Byte Streams]
java:byte_streams [2016/02/26 11:15] (current)
Line 1: Line 1:
 +====== Byte Streams ======
 +
 Τα προγράμματα χρησιμοποιούν **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> ​+<​code ​java CopyBytes.java> ​
 import java.io.FileInputStream;​ import java.io.FileInputStream;​
 import java.io.FileOutputStream;​ import java.io.FileOutputStream;​
 import java.io.IOException;​ import java.io.IOException;​
- +
 public class CopyBytes { public class CopyBytes {
     public static void main(String[] args) throws IOException {     public static void main(String[] args) throws IOException {
- +
         FileInputStream in = null;         FileInputStream in = null;
         FileOutputStream out = null;         FileOutputStream out = null;
- +
         try {         try {
             in = new FileInputStream("​xanadu.txt"​);​             in = new FileInputStream("​xanadu.txt"​);​
             out = new FileOutputStream("​outagain.txt"​);​             out = new FileOutputStream("​outagain.txt"​);​
             int c;             int c;
- +
             while ((c = in.read()) != -1) {             while ((c = in.read()) != -1) {
                 out.write(c);​                 out.write(c);​
Line 38: Line 40:
 </​code> ​ </​code> ​
  
-To //​CopyBytes//​ περνάει τον περισσότερο χρόνο ​του ​σε ένα ​απλό ​βρόχο που διαβάζει το ρεύμα εισόδου και γράφει το ρεύμα εξόδου,​ ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα.+Η μέθοδος main της κλάσης ​//​CopyBytes//​ περνάει τον περισσότερο χρόνο ​επεξεργασίας μέσα ​σε ένα βρόχο που διαβάζει ​από ​το ρεύμα εισόδου και γράφει ​στο ρεύμα εξόδου,​ ένα byte τη φορά, όπως φαίνεται στην παρακάτω εικόνα.
  
-{{:​java:​bytestream.gif?400|}}+{{ :​java:​bytestream.gif |}}
  
 ==== Πάντα να κλείνετε τα Streams ==== ==== Πάντα να κλείνετε τα Streams ====
  
-Το κλείσιμο ενός stream όταν δεν είναι πλέον αναγκαίo είναι πολύ σημαντικό. ​Τόσο ​σημαντικό ώστε το //​CopyBytes//​ χρησιμοποιεί ένα //​τελικό//​ block για να εγγυηθεί ότι και τα δύο stream θα κλείσουν ακόμα και αν παρουσιαστεί κάποιο σφάλμα. Η πρακτική αυτή βοηθά στην αποφυγή σοβαρών διαρροών πόρων.+Το κλείσιμο ενός stream όταν δεν είναι πλέον αναγκαίo είναι πολύ σημαντικό. ​Η κλάση //​CopyBytes//​ χρησιμοποιεί ένα //​τελικό//​ block για να εγγυηθεί ότι και τα δύο stream θα κλείσουν ακόμα και αν παρουσιαστεί κάποιο σφάλμα. Η πρακτική αυτή βοηθά στην αποφυγή σοβαρών διαρροών πόρων
 + 
 +Ένα πιθανό σφάλμα είναι ότι το //​CopyBytes//​ δεν μπόρεσε να ανοίξει το ένα ή και τα δύο αρχεία. Σε αυτή την περίπτωση θα παραχθεί ένα //I/O Exception//​. Όταν συμβαίνει αυτό, η stream μεταβλητή που αντιστοιχεί στο αρχείο θα έχει την τιμή **null**. Αυτός είναι ο λόγος για τον οποίο η κλάση //​CopyBytes//​ φροντίζει ώστε κάθε stream μεταβλητή να περιέχει μια αναφορά αντικειμένου πριν από την κλήση του //close//.
  
-Ένα ​πιθανό σφάλμα ​είναι ότι το //​CopyBytes//​ δεν μπόρεσε να ανοίξει το ένα ή και τα δύο αρχεία. Όταν ​συμβαίνει αυτό, η stream ​μεταβλητή που αντιστοιχεί στο αρχείο δεν αλλάζει ποτέ από την αρχική null τιμή του. Αυτός είναι ο λόγος για τον ​οποίο το //​CopyBytes//​ φροντίζει ώστε κάθε stream μεταβλητή να περιέχει μια αναφορά αντικειμένου πριν ​από την κλήση του //close//.+==== Σε ποιες περιπτώσεις να μην χρησιμοποιείτε τα Byte Streams ====
  
-==== Πότε να μην χρησιμοποιείτε τα Byte Streams ====+Δεδομένου ​ότι το //​xanadu.txt//​ περιέχει δεδομένα χαρακτήρων, ​η καλύτερη προσέγγιση είναι να χρησιμοποιήσετε [[java:​character_streams|streams χαρακτήρων]],​ όπως αναλύεται στην επόμενη ενότητα. Υπάρχουν επίσης streams για πιο πολύπλοκους ​τύπους δεδομένων. Τα byte streams θα πρέπει να χρησιμοποιούνται μόνο για ανάγνωση και εγγραφή από και προς δυαδικά αρχεία. ​
  
-Το //​CopyBytes//​ φαίνεται σαν ένα φυσιολογικό πρόγραμμα,​ αλλά αποτελεί στην πραγματικότητα ένα είδος ​I / O χαμηλού επιπέδου που θα πρέπει να αποφεύγετε. Δεδομένου ​ότι το //​xanadu.txt//​ περιέχει δεδομένα χαρακτήρων,​ η καλύτερη προσέγγιση είναι να χρησιμοποιήσετε ​[[java:​character_streams|character streams]], όπως ​αναλύεται στην επόμενη ενότητα. Υπάρχουν επίσης streams για πιο πολύπλοκους ​τύπους δεδομένων. Τα byte streams θα πρέπει να χρησιμοποιούνται μόνο για πιο primitive I / O. Τέλος, κάτι που πρέπει να θυμόμαστε για τα byte streams είναι ότι όλα τα άλλα είδη stream είναι βασισμένα πάνω τους.+ροηγούμενο: [[:​java:​file_io_intro | Είσοδος ​και έξοδος αρχείων ]]| Επόμενο[[:java:​character_streams | Streams Χαρακτήρων]] |
  
java/byte_streams.1424648408.txt.gz · Last modified: 2016/02/26 11:15 (external edit)