V tomto tutoriálu se pomocí příkladů dozvíme o prostředí Java InputStreamReader a jeho metodách.
InputStreamReader
Třída java.io
balíček lze použít k převedení dat v bytech na data ve znacích.
Rozšiřuje abstraktní třídu Reader
.
InputStreamReader
Třída spolupracuje s dalšími vstupními proudy. Je také známý jako most mezi bajtovými a znakovými toky. Důvodem je, že InputStreamReader
čte bajty ze vstupního proudu jako znaky.
Například některé znaky vyžadovaly uložení 2 bajtů do úložiště. Ke čtení těchto dat můžeme použít čtečku vstupního proudu, která čte 2 bajty dohromady a převádí je na odpovídající znak.
Vytvořte InputStreamReader
Abychom mohli vytvořit InputStreamReader
, musíme java.io.InputStreamReader
nejprve importovat balíček. Jakmile naimportujeme balíček, můžeme vytvořit čtečku vstupního proudu.
// Creates an InputStream FileInputStream file = new FileInputStream(String path); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file);
Ve výše uvedeném příkladu jsme vytvořili InputStreamReader
pojmenovaný vstup spolu s FileInputStream
pojmenovaným souborem.
Zde se data v souboru ukládají pomocí nějakého výchozího kódování znaků.
Můžeme však také určit typ kódování znaků ( UTF8 nebo UTF16 ) v souboru.
// Creates an InputStreamReader specifying the character encoding InputStreamReader input = new InputStreamReader(file, Charset cs);
Zde jsme použili Charset
třídu k určení kódování znaků v souboru.
Metody InputStreamReader
InputStreamReader
Třída poskytuje implementace pro různé metody prezentovat ve Reader
třídě.
metoda read ()
read()
- načte jeden znak z čtečkyread(char() array)
- načte znaky ze čtečky a uloží je do zadaného poleread(char() array, int start, int length)
- načte počet znaků rovných délce ze čtečky a uloží do zadaného pole od začátku
Předpokládejme například, že máme soubor s názvem input.txt s následujícím obsahem.
This is a line of text inside the file.
Zkusme tento soubor přečíst 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(); ) ) )
Výstup
Data ve streamu: Toto je řádek textu uvnitř souboru.
Ve výše uvedeném příkladu jsme vytvořili čtečku vstupního proudu pomocí vstupního proudu souboru. Čtečka vstupního proudu je propojena se souborem input.txt .
FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file);
Ke čtení znaků ze souboru jsme použili read()
metodu.
Metoda getEncoding ()
getEncoding()
Způsob může být použit k získání typ kódování, který se používá k ukládání dat ve vstupním proudu. Například,
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(); ) ) )
Výstup
Kódování znaků vstupu1: Cp1252 Kódování znaků vstupu2: UTF8
Ve výše uvedeném příkladu jsme vytvořili 2 čtečku vstupních proudů s názvem input1 a input2.
- input1 neurčuje kódování znaků. Proto
getEncoding()
metoda vrací kanonický název výchozího kódování znaků. - input2 určuje kódování znaků, UTF8 . Proto
getEncoding()
metoda vrací zadané kódování znaků.
Poznámka : Charset.forName()
Metodu jsme použili k určení typu kódování znaků. Chcete-li se dozvědět více, navštivte Java Charset (oficiální dokumentace Java).
metoda close ()
K uzavření čtečky vstupního proudu můžeme použít close()
metodu. Jakmile je close()
metoda volána, nemůžeme použít čtečku ke čtení dat.
Další metody InputStreamReader
Metoda | Popis |
---|---|
ready() | zkontroluje, zda je stream připraven ke čtení |
mark() | označte pozici v proudu, do které byla načtena data |
reset() | vrátí ovládací prvek do bodu v proudu, kde byla nastavena značka |
Další informace najdete v Java InputStreamReader (oficiální dokumentace Java).