Differences
This shows you the differences between two versions of the page.
|
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:buffered_io [2017/02/07 11:22] gthanos created |
java:buffered_io [2017/02/07 12:16] gthanos [Buffered I/O] |
| ====== Buffered I/O ====== | ====== Buffered I/O ====== |
| |
| Τα περισσότερα από τα παραδείγματα που έχουμε δει μέχρι στιγμής χρησιμοποιούν //unbuffered// I / O. Αυτό σημαίνει ότι κάθε αίτημα ανάγνωσης ή εγγραφής χειρίζεται απευθείας από το υποκείμενο λειτουργικό σύστημα. Αυτό μπορεί να κάνει ένα πρόγραμμα πολύ λιγότερο αποτελεσματικό, δεδομένου ότι κάθε τέτοιο αίτημα, προκαλεί συχνά την πρόσβαση δίσκου, τη δραστηριότητα του δικτύου, ή κάποια άλλη ενέργεια που είναι σχετικά ακριβή. | Τα περισσότερα από τα παραδείγματα που έχουμε δει μέχρι στιγμής διαβάζουν ή γράφουν ένα byte κάθε φορά (unbuffered streams). Προκειμένου να μπορούμε να χειριζόμαστε περισσότερα δεδομένα σε κάθε κλήση συστήματος, η πλατφόρμα της Java υλοποιεί //buffered// I/O streams. Παρακάτω δίνεται πώς μπορείτε να τροποποιήσετε τις κλήσεις constructor στο παράδειγμα //CopyCharacters// για να χρησιμοποιούν buffered I/O: |
| | |
| Για να μειωθεί αυτό το είδος overhead, η πλατφόρμα της Java υλοποιεί //buffered// I / O streams. Τα buffered streams εισόδου διαβάζουν δεδομένα από μια περιοχή μνήμης που είναι γνωστή ως //buffer//. Ομοίως, τα buffered streams εξόδου γράφουν δεδομένα σε ένα //buffer//. | |
| | |
| Ένα πρόγραμμα μπορεί να μετατρέψει ένα unbuffered stream σε ένα buffered stream χρησιμοποιώντας το ιδίωμα περιτυλίγματος που έχουμε χρησιμοποιήσει αρκετές προηγούμενα, όπου το unbuffered stream περνά στον constructor για μια buffered stream κλάση. Παρακάτω δίνεται πώς μπορείτε να τροποποιήσετε τις κλήσεις constructor στο παράδειγμα //CopyCharacters// για να χρησιμοποιούν buffered I / O: | |
| |
| <code java> | <code java> |
| |
| |
| ===== Διαβάζοντας και γράφοντας περισσότερα bytes σε δυαδικό αρχείο ===== | ===== Διαβάζοντας και γράφοντας περισσότερα από ένα bytes σε δυαδικό αρχείο ===== |
| |
| Παρακάτω θα ξαναγράψουμε το πρόγραμμα CopyBytes μόνο που αυτή τη φορά το διάβασμα των bytes δεν θα γίνει ένα-ένα (unbuffered), αλλά θα διαβάζονται και θα γράφονται ακολουθίες των 512 bytes με την βοήθεια των κλάσεων [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html|BufferedInputStream]] και [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html|BufferedOutputStream]]. | Παρακάτω θα ξαναγράψουμε το πρόγραμμα CopyBytes μόνο που αυτή τη φορά το διάβασμα των bytes δεν θα γίνει ένα-ένα (unbuffered), αλλά θα διαβάζονται και θα γράφονται ακολουθίες των 512 bytes με την βοήθεια των κλάσεων [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html|BufferedInputStream]] και [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html|BufferedOutputStream]]. |