In questo tutorial, impareremo a conoscere Java InputStreamReader e i suoi metodi con l'aiuto di esempi.
La InputStreamReader
classe del java.io
pacchetto può essere utilizzata per convertire i dati in byte in dati in caratteri.
Estende la classe astratta Reader
.
La InputStreamReader
classe funziona con altri flussi di input. È anche noto come ponte tra flussi di byte e flussi di caratteri. Questo perché InputStreamReader
legge i byte dal flusso di input come caratteri.
Ad esempio, alcuni caratteri richiedevano 2 byte per essere memorizzati nella memoria. Per leggere tali dati possiamo utilizzare il lettore del flusso di input che legge i 2 byte insieme e li converte nel carattere corrispondente.
Crea un InputStreamReader
Per creare un InputStreamReader
, dobbiamo java.io.InputStreamReader
prima importare il pacchetto. Una volta importato il pacchetto, ecco come possiamo creare il lettore del flusso di input.
// Creates an InputStream FileInputStream file = new FileInputStream(String path); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file);
Nell'esempio precedente, abbiamo creato un InputStreamReader
input denominato insieme al FileInputStream
file denominato.
Qui, i dati nel file vengono memorizzati utilizzando una codifica dei caratteri predefinita.
Tuttavia, possiamo specificare anche il tipo di codifica dei caratteri ( UTF8 o UTF16 ) nel file.
// Creates an InputStreamReader specifying the character encoding InputStreamReader input = new InputStreamReader(file, Charset cs);
Qui abbiamo usato la Charset
classe per specificare la codifica dei caratteri nel file.
Metodi di InputStreamReader
La InputStreamReader
classe fornisce implementazioni per diversi metodi presenti nella Reader
classe.
metodo read ()
read()
- legge un singolo carattere dal lettoreread(char() array)
- legge i caratteri dal lettore e li memorizza nell'array specificatoread(char() array, int start, int length)
- legge il numero di caratteri uguale alla lunghezza dal lettore e memorizza nell'array specificato a partire dall'inizio
Ad esempio, supponiamo di avere un file denominato input.txt con il seguente contenuto.
This is a line of text inside the file.
Proviamo a leggere questo file usando 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(); ) ) )
Produzione
Dati nel flusso: questa è una riga di testo all'interno del file.
Nell'esempio precedente, abbiamo creato un lettore di flusso di input utilizzando il flusso di input di file. Il lettore del flusso di input è collegato al file input.txt .
FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file);
Per leggere i caratteri dal file, abbiamo utilizzato il read()
metodo.
metodo getEncoding ()
Il getEncoding()
metodo può essere utilizzato per ottenere il tipo di codifica utilizzato per archiviare i dati nel flusso di input. Per esempio,
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(); ) ) )
Produzione
La codifica dei caratteri di input1: Cp1252 La codifica dei caratteri di input2: UTF8
Nell'esempio precedente, abbiamo creato 2 lettori di flussi di input denominati input1 e input2.
- input1 non specifica la codifica dei caratteri. Quindi il
getEncoding()
metodo restituisce il nome canonico della codifica dei caratteri predefinita. - input2 specifica la codifica dei caratteri, UTF8 . Quindi il
getEncoding()
metodo restituisce la codifica dei caratteri specificata.
Nota : abbiamo utilizzato il Charset.forName()
metodo per specificare il tipo di codifica dei caratteri. Per saperne di più, visita Java Charset (documentazione Java ufficiale).
metodo close ()
Per chiudere il lettore del flusso di input, possiamo usare il close()
metodo. Una volta close()
chiamato il metodo, non possiamo usare il lettore per leggere i dati.
Altri metodi di InputStreamReader
Metodo | Descrizione |
---|---|
ready() | controlla se il flusso è pronto per essere letto |
mark() | segnare la posizione nel flusso fino alla quale i dati sono stati letti |
reset() | restituisce il controllo al punto del flusso in cui è stato impostato il segno |
Per saperne di più, visita Java InputStreamReader (documentazione Java ufficiale).