Java InputStreamReader (με παραδείγματα)

Σε αυτό το σεμινάριο, θα μάθουμε για το Java InputStreamReader και τις μεθόδους του με τη βοήθεια παραδειγμάτων.

Η InputStreamReaderκλάση του java.ioπακέτου μπορεί να χρησιμοποιηθεί για τη μετατροπή δεδομένων σε byte σε δεδομένα σε χαρακτήρες.

Επεκτείνει την αφηρημένη τάξη Reader.

Η InputStreamReaderτάξη λειτουργεί με άλλες ροές εισόδου. Είναι επίσης γνωστή ως γέφυρα μεταξύ ροών byte και ροών χαρακτήρων. Αυτό συμβαίνει επειδή οι InputStreamReaderbyte διαβάζει από τη ροή εισόδου ως χαρακτήρες.

Για παράδειγμα, ορισμένοι χαρακτήρες απαιτούσαν 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).

ενδιαφέροντα άρθρα...