| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:character_streams [2020/03/09 07:59] gthanos [Διαβάζοντας και γράφοντας γραμμή-γραμμή σε αρχείο κειμένου] |
java:character_streams [2020/03/09 21:00] gthanos [Χρησιμοποιώντας Streams Xαρακτήρων] |
| ====== Ροές Χαρακτήρων (Character Streams) ====== | ====== Ροές Χαρακτήρων (Character Streams) ====== |
| |
| Η Java χρησιμοποιεί για την κωδικοποίηση χαρακτήρων τη μορφοποίηση [[https://en.wikipedia.org/wiki/UTF-16|UTF-16]]. Το πρότυπο UTF-16 κωδικοποιεί κάθε χαρακτήρα σε 2 bytes (max 65000 χαρακτήρες), ενώ μπορεί να κωδικοποιήσει χαρακτήρες και σε 4 bytes, εάν οι συνδυασμοί των 65000 χαρακτήρων αποδειχθούν μη επαρκείς. | Η Java χρησιμοποιεί για την κωδικοποίηση χαρακτήρων τη μορφοποίηση [[https://en.wikipedia.org/wiki/UTF-16|UTF-16]]. Το πρότυπο UTF-16 κωδικοποιεί κάθε χαρακτήρα σε 2 bytes (max 65000 χαρακτήρες), ενώ μπορεί να κωδικοποιήσει χαρακτήρες και σε 4 bytes, εάν οι δυνατοί συνδυασμοί των 65000 χαρακτήρων αποδειχθούν μη επαρκείς. |
| |
| ==== Χρησιμοποιώντας Streams Xαρακτήρων ==== | ==== Χρησιμοποιώντας Streams Xαρακτήρων ==== |
| |
| Όλες οι κλάσεις που περιγράφουν 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// παρουσιάζει τις κλάσεις αυτές. | Όλες οι κλάσεις που περιγράφουν streams χαρακτήρων κατάγονται από τις κλάσεις [[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> |
| </code> | </code> |
| |
| Η κλάση //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 του ακεραίου. | Η κλάση //CopyCharacters// είναι παρόμοια με την κλάση //CopyBytes//. Η διαφορά είναι ότι η //CopyCharacters// χρησιμοποιεί τις κλάσεις [[https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html|FileReader]] και [[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 του ακεραίου. |
| |
| ===== Διαβάζοντας και γράφοντας γραμμή-γραμμή σε αρχείο κειμένου ===== | ===== Διαβάζοντας και γράφοντας γραμμή-γραμμή σε αρχείο κειμένου ===== |