This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:character_streams [2016/02/15 13:10] gthanos [Streams Χαρακτήρων (Character Streams)] |
java:character_streams [2016/02/26 11:15] (current) |
||
---|---|---|---|
Line 2: | Line 2: | ||
Η Java χρησιμοποιεί για την κωδικοποίηση χαρακτήρων τη σύμβαση Unicode. Οποιοδήποτε αρχείο περιέχει χαρακτήρες, για κάθε χαρακτήρα περιέχει την ισοδύναμη δυαδική μορφή του χαρακτήρα. Ένα character stream I/O μεταφράζει αυτόματα της δυαδικές τιμές σε unicode χαρακτήρες. | Η Java χρησιμοποιεί για την κωδικοποίηση χαρακτήρων τη σύμβαση Unicode. Οποιοδήποτε αρχείο περιέχει χαρακτήρες, για κάθε χαρακτήρα περιέχει την ισοδύναμη δυαδική μορφή του χαρακτήρα. Ένα character stream I/O μεταφράζει αυτόματα της δυαδικές τιμές σε unicode χαρακτήρες. | ||
+ | |||
==== Χρησιμοποιώντας Streams Xαρακτήρων ==== | ==== Χρησιμοποιώντας Streams Xαρακτήρων ==== | ||
- | Όλες οι κλάσεις τύπου stream χαρακτήρα κατάγονται από τις κλάσεις Reader και Writer. Όπως και με τα byte streams, υπάρχουν κλάσεις FileReader και FileWriter που παρέχουν streams χαρακτήρων. Το παράδειγμα //CopyCharacters// παρουσιάζει τις κλάσεις αυτές. | + | Όλες οι κλάσεις που περιγράφουν stream χαρακτήρων κατάγονται από τις κλάσεις [[https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html|Reader]] και [[https://docs.oracle.com/javase/7/docs/api/java/io/Writer.html|Writer]]. Σε αναλογία και με τα byte streams που είδαμε προηγούμενα, υπάρχουν οι κλάσεις [[https://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html|FileReader]] και [[https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html|FileWriter]] που επιτρέπουν την ανάγνωση και την εγγραφή streams χαρακτήρων. Το παρακάτω παράδειγμα της κλάσης //CopyCharacters// παρουσιάζει τις κλάσεις αυτές. |
<code java CopyCharacters.java> | <code java CopyCharacters.java> | ||
Line 37: | Line 38: | ||
</code> | </code> | ||
- | Το //CopyCharacters// είναι παρόμοιο με το //CopyBytes//. Η σημαντικότερη διαφορά είναι ότι το //CopyCharacters// χρησιμοποιεί FileReader και FileWriter για είσοδο και έξοδο στη θέση των FileInputStream και FileOutputStream. Παρατηρήστε ότι και τα δύο //CopyBytes// και //CopyCharacters// χρησιμοποιούν μια μεταβλητή int για να διαβάσουν και να γράψουν. Ωστόσο, στο //CopyCharacters//, η μεταβλητή int κρατά μια τιμή χαρακτήρα στα 16 τελευταία bit του, ενώ στο CopyBytes, η μεταβλητή int κρατά μια byte τιμή στα τελευταία 8 bit του. | + | Η κλάση //CopyCharacters// είναι παρόμοια με την κλάση //CopyBytes//. Η σημαντικότερη διαφορά είναι ότι η //CopyCharacters// χρησιμοποιεί τις κλάσεις [[https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html και [[https://docs.oracle.com/javase/7/docs/api/java/io/Writer.html|FileWriter]] για είσοδο και έξοδο στη θέση των FileInputStream και FileOutputStream. Παρατηρήστε ότι τόσο η κλάση //CopyBytes// όσο και η κλάση //CopyCharacters// χρησιμοποιούν μια μεταβλητή int για να διαβάσουν και να γράψουν. Ωστόσο, στο //CopyCharacters//, η μεταβλητή int κρατά μια τιμή χαρακτήρα στα 16 τελευταία bit του, ενώ στο CopyBytes, η μεταβλητή int κρατά μια byte τιμή στα τελευταία 8 bit του. |
==== Streams Xαρακτήρων που χρησιμοποιούν Byte Streams ==== | ==== Streams Xαρακτήρων που χρησιμοποιούν Byte Streams ==== | ||
- | Τα streams χαρακτήρων είναι συχνά «περιτυλίγματα» των byte streams. Το stream χαρακτήρων χρησιμοποιεί το byte stream για την εκτέλεση της φυσικής I/O, ενώ το stream χαρακτήρων χειρίζεται τη μετάφραση μεταξύ των χαρακτήρων και bytes. Η FileReader, για παράδειγμα, χρησιμοποιεί την FileInputStream, ενώ η FileWriter χρησιμοποιεί την FileOutputStream. | + | Τα streams χαρακτήρων είναι συχνά «περιτυλίγματα» των byte streams. Κάθε stream χαρακτήρων χρησιμοποιεί το byte stream για την εκτέλεση της φυσικής I/O, ενώ το stream χαρακτήρων χειρίζεται τη μετάφραση μεταξύ των χαρακτήρων και bytes. Η κλάση [[https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html, για παράδειγμα, χρησιμοποιεί την κλάση [[https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html|FileInputStream]], ενώ η FileWriter χρησιμοποιεί την κλάση [[https://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html|FileOutputStream]]. |
- | ==== I/O με γνώμονα την Γραμμή ==== | + | |
+ | ==== Διαβάζοντας και γράφοντας μία γραμμή ==== | ||
- | Οι I/O χαρακτήρα λαμβάνουν χώρα συνήθως σε μεγαλύτερες μονάδες από μονούς χαρακτήρες. Μια συνηθισμένη μονάδα είναι η γραμμή: μία σειρά από χαρακτήρες με ένα χαρακτήρα αλλαγής γραμμής στο τέλος. Ένας χαρακτήρας αλλαγής γραμμής μπορεί να είναι μια ακολουθία χαρακτήρων carriege return/line feed ('\r''\n'), ένας χαρακτήρας carriege return ('\r'), ή ένας χαρακτήρας line feed ('\n'). Υποστηρικτικά όλοι οι χαρακτήρες αλλαγής γραμμής επιτρέπουν στα προγράμματα να διαβάζουν αρχεία κειμένου που δημιουργήθηκαν σε οποιοδήποτε από τα ευρέως χρησιμοποιούμενα λειτουργικά συστήματα. | + | Η διαδικασία ανάγνωσης ή διαβάσματος χαρακτήρων λαμβάνουν χώρα συνήθως σε ομάδες χαρακτήρων. Μια συνηθισμένη μονάδα είναι η γραμμή. Η γραμμή ορίζεται ως μία σειρά από χαρακτήρες με ένα χαρακτήρα αλλαγής γραμμής στο τέλος. Ο χαρακτήρας αλλαγής γραμμής μπορεί να είναι μια ακολουθία χαρακτήρων carriege return/line feed ('\r''\n'), ένας χαρακτήρας carriege return ('\r'), ή ένας χαρακτήρας line feed ('\n'). |
- | Ας τροποποιήσουμε το παράδειγμα //CopyCharacters// για να χρησιμοποιήσουμε I/O με γνώμονα την γραμμή. Για να το κάνουμε αυτό, θα πρέπει να χρησιμοποιήσουμε δύο κλάσεις που δεν έχουμε ξαναδεί, τις BufferedReader και PrintWriter. Σε αυτό το παράδειγμα, θα εστιάσουμε στην υποστήριξη I/O με γνώμονα την γραμμή. | + | Ας τροποποιήσουμε το παράδειγμα //CopyCharacters// για να χρησιμοποιήσουμε I/O χαρακτήρων για να διαβάσουμε και να γράψουμε γραμμή-γραμμή. Για να το κάνουμε αυτό, θα πρέπει να χρησιμοποιήσουμε δύο κλάσεις που δεν έχουμε ξαναδεί, τις [[https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|BufferedReader]] και [[https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html|PrintWriter]]. |
- | Το παράδειγμα [[CopyLines]] επικαλείται τις BufferedReader.readLine και PrintWriter.println για να κάνει είσοδο και έξοδο, μία γραμμή τη φορά. | + | Το παράδειγμα [[CopyLines]] επικαλείται τις BufferedReader.readLine και PrintWriter.println για να διαβάσει και να γράψει μία γραμμή κάθε φορά. |
<code java CopyLines.java> | <code java CopyLines.java> | ||
Line 83: | Line 85: | ||
</code> | </code> | ||
- | Η κληση της //readline// επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //CopyLines// εξάγει κάθε γραμμή, χρησιμοποιώντας την //println//, η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου. | + | Η κλήση της //readline// επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //CopyLines// εξάγει κάθε γραμμή, χρησιμοποιώντας την //println//, η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου ή μπορεί να είναι διαφορετικός (εξαρτάται από το λειτουργικό σύστημα που χρησιμοποιήθηκε για την εγγραφή του αρχικού αρχείου). |
==== Buffered I/O ==== | ==== Buffered I/O ==== | ||
Line 98: | Line 100: | ||
</code> | </code> | ||
- | Υπάρχουν τέσσερις κλάσεις τύπου buffered stream που χρησιμοποιούνται για να τυλίξουν unbuffered strams: Οι [[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]] δημιουργούν buffered byte streams, ενώ οι [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|BufferedReader]] και [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html|BufferedWriter]] δημιουργούν buffered streams χαρακτήρων. | + | Υπάρχουν τέσσερις κλάσεις τύπου buffered stream που χρησιμοποιούνται για να μετατρέψουν unbuffered streams σε buffered streams: Οι [[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]] δημιουργούν buffered byte streams, ενώ οι [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|BufferedReader]] και [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html|BufferedWriter]] δημιουργούν buffered streams χαρακτήρων. |
|Προηγούμενο: [[:java:byte_streams | Byte Streams ]] | Επόμενο: [[java:formatting | Μορφοποίηση Εξόδου ]]| | |Προηγούμενο: [[:java:byte_streams | Byte Streams ]] | Επόμενο: [[java:formatting | Μορφοποίηση Εξόδου ]]| |