Classe Java InputStreamReader
Classe Java InputStreamReader
Neste tutorial, aprenderemos sobre o Java InputStreamReader e seus métodos com a ajuda de exemplos.
O InputStreamReader
classe do java.io
pacote pode ser usado para converter dados em bytes em dados em caracteres.
Ele estende a classe abstrata Reader
.
O InputStreamReader
classe trabalha com outros fluxos de entrada. Também é conhecido como uma ponte entre fluxos de bytes e fluxos de caracteres. Isso ocorre porque o InputStreamReader
lê bytes do fluxo de entrada como caracteres.
Por exemplo, alguns caracteres requerem 2 bytes para serem armazenados no armazenamento. Para ler esses dados podemos usar o leitor de fluxo de entrada que lê os 2 bytes juntos e converte no caractere correspondente.
Criar um InputStreamReader
Para criar um
InputStreamReader
, devemos importar o java.io.InputStreamReader
pacote primeiro. Uma vez que importamos o pacote, aqui é como podemos criar o leitor de fluxo de entrada.
// Creates an InputStream
FileInputStream file = new FileInputStream(String path);
// Creates an InputStreamReader
InputStreamReader input = new InputStreamReader(file);
No exemplo acima, criamos um
InputStreamReader
chamado entrada junto com o FileInputStream
chamado arquivo . Aqui, os dados no arquivo são armazenados usando alguma codificação de caracteres padrão.
No entanto, podemos especificar o tipo de codificação de caracteres (UTF8 ou UTF16 ) no arquivo também.
// Creates an InputStreamReader specifying the character encoding
InputStreamReader input = new InputStreamReader(file, Charset cs);
Aqui, usamos o
Charset
class para especificar a codificação de caracteres no arquivo. Métodos de InputStreamReader
O
InputStreamReader
classe fornece implementações para diferentes métodos presentes no Reader
classe. Método read()
read()
- lê um único caractere do leitorread(char[] array)
- lê os caracteres do leitor e armazena no array especificadoread(char[] array, int start, int length)
- lê o número de caracteres igual a comprimento do leitor e armazena no array especificado a partir do start
Por exemplo, suponha que temos um arquivo chamado input.txt com o seguinte conteúdo.
This is a line of text inside the file.
Vamos tentar ler este arquivo 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();
}
}
}
Saída
Data in the stream: This is a line of text inside the file.
No exemplo acima, criamos um leitor de fluxo de entrada usando o fluxo de entrada de arquivo. O leitor de fluxo de entrada está vinculado ao arquivo input.txt .
FileInputStream file = new FileInputStream("input.txt");
InputStreamReader input = new InputStreamReader(file);
Para ler os caracteres do arquivo, usamos o
read()
método. Método getEncoding()
O
getEncoding()
pode ser usado para obter o tipo de codificação usado para armazenar dados no fluxo de entrada. Por exemplo,
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();
}
}
}
Saída
The character encoding of input1: Cp1252 The character encoding of input2: UTF8
No exemplo acima, criamos 2 leitores de fluxo de entrada chamados input1 e entrada2 .
- entrada1 não especifica a codificação de caracteres. Daí o
getEncoding()
retorna o nome canônico da codificação de caracteres padrão. - entrada2 especifica a codificação de caracteres, UTF8 . Daí o
getEncoding()
retorna a codificação de caracteres especificada.
Observação :Usamos o
Charset.forName()
método para especificar o tipo de codificação de caracteres. Para saber mais, visite Java Charset (documentação oficial do Java). método close()
Para fechar o leitor de fluxo de entrada, podemos usar o
close()
método. Uma vez que o close()
é chamado, não podemos usar o leitor para ler os dados. Outros métodos de InputStreamReader
Método | Descrição |
---|---|
ready() | verifica se o stream está pronto para ser lido |
mark() | marcar a posição no fluxo até a qual os dados foram lidos |
reset() | retorna o controle ao ponto no fluxo onde a marca foi definida |
Para saber mais, visite Java InputStreamReader (documentação oficial do Java).
Java