| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:byte_streams [2020/03/05 13:07] gthanos [Buffered Streams] |
java:byte_streams [2020/03/08 22:54] gthanos [Buffered Streams] |
| ==== Χρησιμοποιώντας Byte Streams ==== | ==== Χρησιμοποιώντας Byte Streams ==== |
| |
| Θα εξερευνήσουμε τις κλάσεις FileInputStream και FileOutputStream με χρήση του παρακάτω παραδείγματος //CopyBytes//, το οποίο λαμβάνει προς αντιγραφή ένα αρχείο από την γραμμή εντολών. Μπορείτε να χρησιμοποιήσετε ένα αρχείο κειμένου (π.χ. [[xanadu.txt]]) ή μία [[http://optipng.sourceforge.net/pngtech/img/lena.png|εικόνα]]. | Θα εξερευνήσουμε τις κλάσεις FileInputStream και FileOutputStream με χρήση του παρακάτω παραδείγματος //CopyBytes//, το οποίο λαμβάνει προς αντιγραφή ένα αρχείο από την γραμμή εντολών. Μπορείτε να χρησιμοποιήσετε ένα αρχείο κειμένου (π.χ. [[xanadu.txt]]), μία εικόνα ή οποιοδήποτε άλλο αρχείο για να το εκτελέσετε. Το παράδειγμα χρησιμοποιεί την εικόνα [[http://optipng.sourceforge.net/pngtech/img/lena.png|lena.png]]. |
| |
| <code java CopyBytes.java> | <code java CopyBytes.java> |
| ===== 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]]. |
| } | } |
| } | } |
| }</code> | } |
| | </code> |
| | |
| | <WRAP tip 80% center round> |
| | O ρόλος του buffer είναι πάντα η βελτιστοποίηση της απόδοσης. Για παράδειγμα, διαβάζοντας από το δίσκο είναι γνωστό ότι ο δίσκος διαβάζει σε τμήματα των 2Κ ή 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 | Μετασχηματισμός των ροών δεδομένων σε τύπους δεδομένων]] | |
| |