java:character_streams

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:character_streams [2016/02/15 13:19]
gthanos
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 χαρακτήρων κατάγονται από τις κλάσεις [[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//​ παρουσιάζει τις κλάσεις αυτές.+Όλες οι κλάσεις που περιγράφουν 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//​ χρησιμοποιεί τις κλάσεις 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 και [[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. Η κλάση 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]].+Τα 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 84: Line 85:
 </​code>​ </​code>​
  
-Η κληση της //​readline//​ επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //​CopyLines//​ εξάγει κάθε γραμμή,​ χρησιμοποιώντας την //​println//,​ η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου.+Η κλήση της //​readline//​ επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //​CopyLines//​ εξάγει κάθε γραμμή,​ χρησιμοποιώντας την //​println//,​ η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου ​ή μπορεί να είναι διαφορετικός (εξαρτάται από το λειτουργικό σύστημα που χρησιμοποιήθηκε για την εγγραφή του αρχικού αρχείου).
  
 ==== Buffered I/O ==== ==== Buffered I/O ====
Line 99: 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 | Μορφοποίηση Εξόδου ]]|
java/character_streams.1455542390.txt.gz · Last modified: 2016/02/26 11:15 (external edit)