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 11:52]
gthanos [Χρησιμοποιώντας Streams Xαρακτήρων]
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]].
  
-Υπάρχουν δύο γενικού σκοπού byte-προς-χαρακτήρα streams "​γέφυρα"​ : τα InputStreamReader ​και ​OutputStreamWriter. Χρησιμοποιήστε ​τα για να δημιουργήσετε streams χαρακτήρων όταν δεν υπάρχουν προδημιουργημένες κλάσεις stream χαρακτήρων που ανταποκρίνονται στις ανάγκες σας. ​+==== Διαβάζοντας και ​γράφοντας μία γραμμή ​====
  
-==== I/O με γνώμονα την ​Γραμμή ​====+Η διαδικασία ανάγνωσης ή διαβάσματος χαρακτήρων λαμβάνουν χώρα συνήθως σε ομάδες χαρακτήρων. Μια συνηθισμένη  μονάδα είναι η γραμμή. Η γραμμή ορίζεται ως μία σειρά από χαρακτήρες με ένα χαρακτήρα αλλαγής γραμμής στο τέλος. Ο χαρακτήρας αλλαγής γραμμής μπορεί να είναι μια ακολουθία χαρακτήρων carriege return/line feed ('​\r''​\n'​),​ ένας χαρακτήρας carriege return ('​\r'​),​ ή ένας χαρακτήρας line feed ('​\n'​). ​
  
-Οι I/O χαρακτήρα λαμβάνουν χώρα ​συνήθως σε μεγαλύτερες μονάδες από μονούς χαρακτήρες. Μια συνηθισμένη ​ μονάδα είναι η γραμμή: μία σειρά από χαρακτήρες με ένα χαρακτήρα αλλαγής γραμμής στο τέλος. Ένας ​χαρακτήρας αλλαγής γραμμής μπορεί ​να είναι μια ακολουθία χαρακτήρων carriege return/line feed ('​\r''​\n'​),​ ένας χαρακτήρας carriege return ('​\r'​),​ ή ένας χαρακτήρας line feed ('​\n'​). Υποστηρικτικά όλοι οι χαρακτήρες αλλαγής ​γραμμής επιτρέπουν στα προγράμματα να διαβάζουν αρχεία ​κειμένου ​που δημιουργήθηκαν σε οποιοδήποτε από τα ευρέως ​χρησιμοποιούμενα λειτουργικά συστήματα.+Ας τροποποιήσουμε το παράδειγμα ​//​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]]
  
-Ας τροποποιήσουμε το //​CopyCharacters//​ παράδειγμα για να χρησιμοποιήσουμε I/O με γνώμονα την γραμμή. Για να το κάνουμε αυτό, θα πρέπει να χρησιμοποιήσουμε δύο κλάσεις που δεν έχουμε ξαναδεί,​ τις BufferedReader και PrintWriter. Σε αυτό το παράδειγμα,​ θα εστιάσουμε στην υποστήριξη I/O με γνώμονα την γραμμή και όχι στις έννοιες των [[java:​character_streams#​Buffered I/​O|Buffered I/O]] και [[Μορφοποίησης]] . +Το παράδειγμα [[CopyLines]] επικαλείται τις BufferedReader.readLine και PrintWriter.println για να διαβάσει και ​να γράψει ​μία γραμμή ​κάθε ​φορά.
- +
-Το παράδειγμα [[CopyLines]] επικαλείται τις BufferedReader.readLine και PrintWriter.println για να κάνει είσοδο ​και ​έξοδο, ​μία γραμμή ​τη φορά.+
  
 <code java CopyLines.java>​ <code java CopyLines.java>​
Line 88: Line 85:
 </​code>​ </​code>​
  
-Η κληση της //​readline//​ επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //​CopyLines//​ εξάγει κάθε γραμμή,​ χρησιμοποιώντας την //​println//,​ η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου.+Η κλήση της //​readline//​ επιστρέφει μια γραμμή κειμένου. To πρόγραμμα //​CopyLines//​ εξάγει κάθε γραμμή,​ χρησιμοποιώντας την //​println//,​ η οποία προσθέτει τον χαρακτήρα αλλαγής γραμμής για το τρέχον λειτουργικό σύστημα. Αυτός μπορεί να μην είναι ο ίδιος χαρακτήρας αλλαγής γραμμής που χρησιμοποιήθηκε στο αρχείο εισόδου ​ή μπορεί να είναι διαφορετικός (εξαρτάται από το λειτουργικό σύστημα που χρησιμοποιήθηκε για την εγγραφή του αρχικού αρχείου).
  
 ==== Buffered I/O ==== ==== Buffered I/O ====
Line 96: Line 93:
 Για να μειωθεί αυτό το είδος overhead, η πλατφόρμα της Java υλοποιεί //​buffered//​ I / O streams. Τα buffered streams εισόδου διαβάζουν δεδομένα από μια περιοχή μνήμης που είναι γνωστή ως //buffer//. Ομοίως,​ τα buffered streams εξόδου γράφουν δεδομένα σε ένα //buffer//. Για να μειωθεί αυτό το είδος 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:+Ένα πρόγραμμα μπορεί να μετατρέψει ένα unbuffered stream ​ σε ένα buffered stream χρησιμοποιώντας το ιδίωμα περιτυλίγματος που έχουμε χρησιμοποιήσει αρκετές ​προηγούμενα, όπου το unbuffered stream περνά στον ​ constructor για μια buffered stream κλάση. ​Παρακάτω ​δίνεται πώς μπορείτε να τροποποιήσετε τις κλήσεις constructor στο παράδειγμα //​CopyCharacters//​ για να χρησιμοποιούν buffered I / O:
  
 <code java> <code java>
Line 103: Line 100:
 </​code>​ </​code>​
  
-Υπάρχουν τέσσερις κλάσεις τύπου buffered stream που χρησιμοποιούνται για να τυλίξουν unbuffered ​strams: Οι BufferedInputStream και BufferedOutputStream δημιουργούν buffered byte streams, ενώ οι BufferedReader και BufferedWriter ​δημιουργούν buffered streams χαρακτήρων.fered byte streams, ενώ οι BufferedReader και ​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.1425988329.txt.gz · Last modified: 2016/02/26 11:15 (external edit)