Σε αυτό το σεμινάριο, θα μάθουμε για το Java InputStreamReader και τις μεθόδους του με τη βοήθεια παραδειγμάτων.
Η InputStreamReader
κλάση του java.io
πακέτου μπορεί να χρησιμοποιηθεί για τη μετατροπή δεδομένων σε byte σε δεδομένα σε χαρακτήρες.
Επεκτείνει την αφηρημένη τάξη Reader
.
Η InputStreamReader
τάξη λειτουργεί με άλλες ροές εισόδου. Είναι επίσης γνωστή ως γέφυρα μεταξύ ροών byte και ροών χαρακτήρων. Αυτό συμβαίνει επειδή οι InputStreamReader
byte διαβάζει από τη ροή εισόδου ως χαρακτήρες.
Για παράδειγμα, ορισμένοι χαρακτήρες απαιτούσαν 2 byte για αποθήκευση στον χώρο αποθήκευσης. Για να διαβάσουμε τέτοια δεδομένα μπορούμε να χρησιμοποιήσουμε τον αναγνώστη ροής εισόδου που διαβάζει τα 2 byte μαζί και μετατρέπεται στον αντίστοιχο χαρακτήρα.
Δημιουργήστε ένα InputStreamReader
Για να δημιουργήσουμε ένα InputStreamReader
, πρέπει java.io.InputStreamReader
πρώτα να εισαγάγουμε το πακέτο. Μόλις εισαγάγουμε το πακέτο εδώ είναι πώς μπορούμε να δημιουργήσουμε τον αναγνώστη ροής εισόδου.
// Creates an InputStream FileInputStream file = new FileInputStream(String path); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file);
Στο παραπάνω παράδειγμα, δημιουργήσαμε μια InputStreamReader
ονομαστική εισαγωγή μαζί με το FileInputStream
όνομα αρχείου.
Εδώ, τα δεδομένα στο αρχείο αποθηκεύονται χρησιμοποιώντας κάποια προεπιλεγμένη κωδικοποίηση χαρακτήρων.
Ωστόσο, μπορούμε επίσης να καθορίσουμε τον τύπο κωδικοποίησης χαρακτήρων ( UTF8 ή UTF16 ) και στο αρχείο.
// Creates an InputStreamReader specifying the character encoding InputStreamReader input = new InputStreamReader(file, Charset cs);
Εδώ, χρησιμοποιήσαμε την Charset
τάξη για να καθορίσουμε την κωδικοποίηση χαρακτήρων στο αρχείο.
Μέθοδοι του InputStreamReader
Η InputStreamReader
τάξη παρέχει υλοποιήσεις για διαφορετικές μεθόδους που υπάρχουν στην Reader
τάξη.
read () Μέθοδος
read()
- διαβάζει έναν μόνο χαρακτήρα από τον αναγνώστηread(char() array)
- διαβάζει τους χαρακτήρες από τον αναγνώστη και αποθηκεύει στον καθορισμένο πίνακαread(char() array, int start, int length)
- διαβάζει τον αριθμό των χαρακτήρων ίσο με το μήκος από τον αναγνώστη και αποθηκεύει στον καθορισμένο πίνακα ξεκινώντας από την αρχή
Για παράδειγμα, ας υποθέσουμε ότι έχουμε ένα αρχείο με όνομα input.txt με το ακόλουθο περιεχόμενο.
This is a line of text inside the file.
Ας προσπαθήσουμε να διαβάσουμε αυτό το αρχείο χρησιμοποιώντας InputStreamReader
.
import java.io.InputStreamReader; import java.io.FileInputStream; class Main ( public static void main(String() args) ( // Creates an array of character char() array = new char(100); try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file); // Reads characters from the file input.read(array); System.out.println("Data in the stream:"); System.out.println(array); // Closes the reader input.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) )
Παραγωγή
Δεδομένα στη ροή: Αυτή είναι μια γραμμή κειμένου μέσα στο αρχείο.
Στο παραπάνω παράδειγμα, δημιουργήσαμε έναν αναγνώστη ροής εισόδου χρησιμοποιώντας τη ροή εισαγωγής αρχείου. Ο αναγνώστης ροής εισόδου συνδέεται με το αρχείο input.txt .
FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file);
Για να διαβάσετε χαρακτήρες από το αρχείο, χρησιμοποιήσαμε τη read()
μέθοδο.
getEncoding () Μέθοδος
Η getEncoding()
μέθοδος μπορεί να χρησιμοποιηθεί για να πάρει τον τύπο κωδικοποίησης που χρησιμοποιείται για την αποθήκευση δεδομένων στη ροή εισόδου. Για παράδειγμα,
import java.io.InputStreamReader; import java.nio.charset.Charset; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates an InputStreamReader with default encoding InputStreamReader input1 = new InputStreamReader(file); // Creates an InputStreamReader specifying the encoding InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8")); // Returns the character encoding of the input stream System.out.println("Character encoding of input1: " + input1.getEncoding()); System.out.println("Character encoding of input2: " + input2.getEncoding()); // Closes the reader input1.close(); input2.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) )
Παραγωγή
Η κωδικοποίηση χαρακτήρων του input1: Cp1252 Η κωδικοποίηση χαρακτήρων του input2: UTF8
Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει 2 αναγνώστες ροής εισόδου που ονομάζονται input1 και input2.
- Το input1 δεν καθορίζει την κωδικοποίηση χαρακτήρων. Εξ ου και η
getEncoding()
μέθοδος επιστρέφει το κανονικό όνομα της προεπιλεγμένης κωδικοποίησης χαρακτήρων. - Το input2 καθορίζει την κωδικοποίηση χαρακτήρων, UTF8 . Εξ ου και η
getEncoding()
μέθοδος επιστρέφει την καθορισμένη κωδικοποίηση χαρακτήρων.
Σημείωση : Χρησιμοποιήσαμε τη Charset.forName()
μέθοδο για να καθορίσουμε τον τύπο κωδικοποίησης χαρακτήρων. Για να μάθετε περισσότερα, επισκεφθείτε το Java Charset (επίσημη τεκμηρίωση Java).
κλείσιμο () Μέθοδος
Για να κλείσουμε τον αναγνώστη ροής εισόδου, μπορούμε να χρησιμοποιήσουμε τη close()
μέθοδο. Μόλις close()
κληθεί η μέθοδος, δεν μπορούμε να χρησιμοποιήσουμε τον αναγνώστη για να διαβάσουμε τα δεδομένα.
Άλλες μέθοδοι του InputStreamReader
Μέθοδος | Περιγραφή |
---|---|
ready() | ελέγχει εάν η ροή είναι έτοιμη για ανάγνωση |
mark() | επισημάνετε τη θέση σε ροή μέχρι την οποία έχουν διαβαστεί τα δεδομένα |
reset() | επιστρέφει το στοιχείο ελέγχου στο σημείο της ροής όπου ορίστηκε το σήμα |
Για να μάθετε περισσότερα, επισκεφθείτε το Java InputStreamReader (επίσημη τεκμηρίωση Java).