User Tools

Site Tools


java:byte_streams

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:byte_streams [2020/03/05 15:34] gthanosjava:byte_streams [2020/03/09 07:27] (current) – [Buffered Streams] gthanos
Line 3: Line 3:
 Όλες οι κλάσεις που θα δούμε στη συνέχεια αυτής της ενότητας χρησιμοποιούν εσωτερικά **byte streams** για να εκτελέσουν είσοδο και έξοδο δεδομένων από αρχεία ή άλλες πηγές. Οι κλάσεις τύπου byte-stream είναι απόγονοι των κλάσεων **InputStream** και **OutputStream**. Όλες οι κλάσεις που θα δούμε στη συνέχεια αυτής της ενότητας χρησιμοποιούν εσωτερικά **byte streams** για να εκτελέσουν είσοδο και έξοδο δεδομένων από αρχεία ή άλλες πηγές. Οι κλάσεις τύπου byte-stream είναι απόγονοι των κλάσεων **InputStream** και **OutputStream**.
  
-Για να δείξουμε πώς δουλεύουν τα 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, θα ξεκινήσουμε από τις κλάσεις **[[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 ====
Line 62: Line 62:
 ===== Buffered Streams ===== ===== Buffered Streams =====
  
-Εκτός τα "απλά" input/output streams, υπάρχει η δυνατότητα να χρησιμοποιήσετε buffered streams, δηλαδή streams που κάνουν εσωτερικά buffering ώστε να βελτιστοποιήσουν την διαδικασία ανάγνωσης εγγραφής. Οι κλάσεις αυτές είναι οι [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedInputStream.html|BufferedInputStream]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedOutputStream.html|BufferedOutputStream]]. Το μέγεθος του χρησιμοποιούμενου buffer είναι παραμετροποιήσιμο στον κατασκευαστή των παραπάνω κλάσεων. Προτείνεται να μην επιλέγετε εσείς το μέγεθος του buffer (εκτός αν ξέρετε τι κάνετε...). +Στα παραπάνω streams, υπάρχει η δυνατότητα να χρησιμοποιήσετε επιπλέον buffered streams, δηλαδή streams που κάνουν εσωτερικά buffering ώστε να βελτιστοποιήσουν την διαδικασία ανάγνωσης εγγραφής. Οι κλάσεις αυτές είναι οι [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedInputStream.html|BufferedInputStream]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedOutputStream.html|BufferedOutputStream]]. Το μέγεθος του χρησιμοποιούμενου buffer είναι παραμετροποιήσιμο στον κατασκευαστή των παραπάνω κλάσεων. Προτείνεται να μην επιλέγετε εσείς το μέγεθος του buffer (εκτός αν ξέρετε τι κάνετε...). 
  
 Παρακάτω δίνεται το προηγούμενο παράδειγμα χρησιμοποιώντας τις κλάσεις [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedInputStream.html|BufferedInputStream]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedOutputStream.html|BufferedOutputStream]]. Παρακάτω δίνεται το προηγούμενο παράδειγμα χρησιμοποιώντας τις κλάσεις [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedInputStream.html|BufferedInputStream]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedOutputStream.html|BufferedOutputStream]].
Line 86: Line 86:
     }      } 
   }   }
-}</code>+} 
 +</code
 + 
 +<WRAP tip 80% center round> 
 +O ρόλος του buffer είναι πάντα η βελτιστοποίηση της απόδοσης κατά την ανάγνωση ή εγγραφή. Για παράδειγμα, διαβάζοντας από το δίσκο είναι γνωστό ότι ο δίσκος διαβάζει σε τμήματα των 2Κ ή 4Κ κατ' ελάχιστο. Εάν εσείς διαβάζετε λιγότερα δεδομένα κάθε φορά (π.χ. 512 bytes που είναι το προηγούμενο παράδειγμα) και δεν χρησιμοποιήσετε ένα buffered stream, για να διαβάσετε το σύνολο μιας σελίδας του δίσκου θα χρειαστείτε κατ' ελάχιστο 8 προσπελάσεις (8*512 = 4Κ). Αντ' αυτού, χρησιμοποιώντας ένα buffered stream επιτυγχάνετε η κάθε σελίδα του δίσκου να προσπελαστεί μόνο μία φορά και η συνολική πληροφορία της σελίδας να αποθηκευτεί στο ενδιάμεσο buffer. 
 +</WRAP>
  
-|Προηγούμενο: [[:java:file_io_intro | Είσοδος και έξοδος αρχείων ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:byte_streams_to_data | [[:java:byte_streams_to_data]] |+|Προηγούμενο: [[:java:file_io_intro | Είσοδος και έξοδος αρχείων ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:byte_streams_to_data | Μετασχηματισμός των ροών δεδομένων σε τύπους δεδομένων]] |
  
java/byte_streams.1583422495.txt.gz · Last modified: 2020/03/05 15:34 (external edit)