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 [2015/03/10 12:38]
gthanos [Buffered I/O]
java:character_streams [2016/02/26 11:15] (current)
Line 1: Line 1:
 ====== Streams Χαρακτήρων (Character Streams) ====== ====== Streams Χαρακτήρων (Character Streams) ======
  
-Η πλατφόρμα της Java αποθηκεύει τιμές χαρακτήρα χρησιμοποιώντας την σύμβαση Unicode. Ένα character stream I/O μεταφράζει αυτόματα ​αυτή ​την εσωτερική μορφή στο και από το τοπικό σύνολο ​χαρακτήρων+Η Java χρησιμοποιεί για την κωδικοποίηση χαρακτήρων ​τη σύμβαση Unicode. Οποιοδήποτε αρχείο περιέχει ​χαρακτήρες, για κάθε ​χαρακτήρα περιέχει ​την ​ισοδύναμη δυαδική μορφή του χαρακτήρα. Ένα character stream I/O μεταφράζει αυτόματα της δυαδικές τιμές ​σε unicode ​χαρακτήρες.
  
-Για τις περισσότερες εφαρμογές,​ η I/O με streams χαρακτήρων δεν είναι πιο περίπλοκη από την I/O με byte streams. Η είσοδος και έξοδος που γίνεται με stream κλάσεις,​ μεταφράζει αυτόματα στο και από το τοπικό σύνολο χαρακτήρων. Ένα πρόγραμμα που χρησιμοποιεί streams χαρακτήρων αντί για byte streams, προσαρμόζεται αυτόματα στο τοπικό σύνολο χαρακτήρων. 
 ==== Χρησιμοποιώντας Streams Xαρακτήρων ==== ==== Χρησιμοποιώντας Streams Xαρακτήρων ====
  
-Όλες οι κλάσεις ​τύπου stream χαρακτήρα κατάγονται από τις κλάσεις Reader και Writer. ​Όπως ​και με τα byte streams, υπάρχουν κλάσεις ​stream χαρακτήρα που ειδικεύονται σε I / O αρχείου : FileReader και FileWriter. Το παράδειγμα //​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 39: 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'​). Υποστηρικτικά όλοι οι χαρακτήρες αλλαγής ​γραμμής επιτρέπουν στα προγράμματα να διαβάζουν αρχεία κειμένου που δημιουργήθηκαν σε οποιοδήποτε από τα ευρέως χρησιμοποιούμενα λειτουργικά συστήματα.+==== Διαβάζοντας και γράφοντας μία γραμμή ​====
  
-Ας τροποποιήσουμε το //​CopyCharacters//​ παράδειγμα για να χρησιμοποιήσουμε I/O με γνώμονα ​την γραμμή. ​Για να το κάνουμε αυτό, θα πρέπει να χρησιμοποιήσουμε δύο κλάσεις που δεν έχουμε ξαναδεί, τις BufferedReader και PrintWriter. Σε αυτό το παράδειγμα, θα εστιάσουμε στην υποστήριξη I/O με γνώμονα την γραμμή.+Η διαδικασία ανάγνωσης ή διαβάσματος χαρακτήρων λαμβάνουν ​χώρα συνήθως ​σε ομάδες χαρακτήρων. Μια συνηθισμένη  ​μονάδα είναι η γραμμή. ​Η γραμμή ​ορίζεται ως μία σειρά ​από χαρακτήρες με ένα χαρακτήρα αλλαγής γραμμής στο τέλος. Ο χαρακτήρας αλλαγής γραμμής μπορεί να είναι μια ακολουθία χαρακτήρων carriege return/line feed ('​\r''​\n'​),​ ένας χαρακτήρας carriege return ('​\r'​),​ ή ένας χαρακτήρας line feed ('​\n'​)
  
-Το παράδειγμα [[CopyLines]] επικαλείται τις BufferedReader.readLine και PrintWriter.println για να κάνει είσοδο ​και ​έξοδο, ​μία γραμμή ​τη φορά.+Ας τροποποιήσουμε το παράδειγμα //​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 για να διαβάσει και ​να γράψει ​μία γραμμή ​κάθε ​φορά.
  
 <code java CopyLines.java>​ <code java CopyLines.java>​
Line 85: Line 85:
 </​code>​ </​code>​
  
-Η κληση της //​readline//​ επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //​CopyLines//​ εξάγει κάθε γραμμή,​ χρησιμοποιώντας την //​println//,​ η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου.+Η κλήση της //​readline//​ επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //​CopyLines//​ εξάγει κάθε γραμμή,​ χρησιμοποιώντας την //​println//,​ η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου ​ή μπορεί να είναι διαφορετικός (εξαρτάται από το λειτουργικό σύστημα που χρησιμοποιήθηκε για την εγγραφή του αρχικού αρχείου).
  
 ==== Buffered I/O ==== ==== Buffered I/O ====
Line 100: 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.1425991102.txt.gz · Last modified: 2016/02/26 11:15 (external edit)