W tym samouczku, na przykładach, nauczymy się języka Java InputStreamReader i jego metod.
InputStreamReader
Klasa java.io
pakietu można wykorzystać do konwersji danych w bajtach na dane w znakach.
Rozszerza klasę abstrakcyjną Reader
.
InputStreamReader
Klasa współpracuje z innymi strumieniami wejściowymi. Jest również znany jako pomost między strumieniami bajtów i strumieniami znaków. Dzieje się tak, ponieważ InputStreamReader
odczytuje bajty ze strumienia wejściowego jako znaki.
Na przykład niektóre znaki wymagały przechowywania w pamięci 2 bajtów. Aby odczytać takie dane, możemy użyć czytnika strumienia wejściowego, który odczytuje razem 2 bajty i konwertuje na odpowiedni znak.
Utwórz InputStreamReader
Aby utworzyć plik InputStreamReader
, musimy najpierw zaimportować java.io.InputStreamReader
pakiet. Po zaimportowaniu pakietu tutaj, możemy utworzyć czytnik strumienia wejściowego.
// Creates an InputStream FileInputStream file = new FileInputStream(String path); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file);
W powyższym przykładzie utworzyliśmy InputStreamReader
nazwane wejście wraz z FileInputStream
nazwanym plikiem.
Tutaj dane w pliku są przechowywane przy użyciu domyślnego kodowania znaków.
W pliku możemy jednak określić również typ kodowania znaków ( UTF8 lub UTF16 ).
// Creates an InputStreamReader specifying the character encoding InputStreamReader input = new InputStreamReader(file, Charset cs);
Tutaj użyliśmy Charset
klasy do określenia kodowania znaków w pliku.
Metody InputStreamReader
InputStreamReader
Klasa zawiera implementacje dla różnych sposobów przedstawienia w Reader
klasie.
read () Metoda
read()
- odczytuje pojedynczy znak z czytnikaread(char() array)
- odczytuje znaki z czytnika i przechowuje w określonej tablicyread(char() array, int start, int length)
- odczytuje liczbę znaków równą długości z czytnika i zapisuje w określonej tablicy zaczynając od początku
Na przykład załóżmy, że mamy plik o nazwie input.txt z następującą zawartością.
This is a line of text inside the file.
Spróbujmy odczytać ten plik za pomocą 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(); ) ) )
Wynik
Dane w strumieniu: jest to wiersz tekstu w pliku.
W powyższym przykładzie utworzyliśmy czytnik strumienia wejściowego przy użyciu strumienia wejściowego pliku. Czytnik strumienia wejściowego jest powiązany z plikiem input.txt .
FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file);
Aby odczytać znaki z pliku, użyliśmy read()
metody.
getEncoding () Metoda
getEncoding()
Metoda może być stosowana, aby uzyskać rodzaj kodowania, który jest używany do przechowywania danych w strumieniu wejściowym. Na przykład,
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(); ) ) )
Wynik
Kodowanie znaków input1: Cp1252 Kodowanie znaków input2: UTF8
W powyższym przykładzie utworzyliśmy 2 czytniki strumienia wejściowego o nazwach input1 i input2.
- input1 nie określa kodowania znaków. Dlatego
getEncoding()
metoda zwraca nazwę kanoniczną domyślnego kodowania znaków. - input2 określa kodowanie znaków, UTF8 . Dlatego
getEncoding()
metoda zwraca określone kodowanie znaków.
Uwaga : wykorzystaliśmy tę Charset.forName()
metodę, aby określić typ kodowania znaków. Aby dowiedzieć się więcej, odwiedź Java Charset (oficjalna dokumentacja Java).
close () Metoda
Aby zamknąć czytnik strumienia wejściowego, możemy skorzystać z close()
metody. Po close()
wywołaniu metody nie możemy użyć czytnika do odczytu danych.
Inne metody InputStreamReader
metoda | Opis |
---|---|
ready() | sprawdza, czy strumień jest gotowy do odczytu |
mark() | zaznacz pozycję w strumieniu, do której zostały odczytane dane |
reset() | zwraca formant do punktu w strumieniu, w którym ustawiono znacznik |
Aby dowiedzieć się więcej, odwiedź stronę Java InputStreamReader (oficjalna dokumentacja Java).