Java InputStreamReader (com exemplos)

Neste tutorial, aprenderemos sobre Java InputStreamReader e seus métodos com a ajuda de exemplos.

A InputStreamReaderclasse do java.iopacote pode ser usada para converter dados em bytes em dados em caracteres.

Ele estende a classe abstrata Reader.

A InputStreamReaderclasse trabalha com outros fluxos de entrada. Também é conhecido como uma ponte entre fluxos de bytes e fluxos de caracteres. Isso ocorre porque InputStreamReaderlê bytes do fluxo de entrada como caracteres.

Por exemplo, alguns caracteres exigiam 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 os converte no caractere correspondente.

Crie um InputStreamReader

Para criar um InputStreamReader, devemos java.io.InputStreamReaderprimeiro importar o pacote. Depois de importar o pacote, aqui está 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 uma InputStreamReaderentrada nomeada junto com o FileInputStreamarquivo nomeado.

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 a Charsetclasse para especificar a codificação de caracteres no arquivo.

Métodos de InputStreamReader

A InputStreamReaderclasse fornece implementações para diferentes métodos presentes na Readerclasse.

Método read ()

  • read() - lê um único caractere do leitor
  • read(char() array) - lê os caracteres do leitor e os armazena na matriz especificada
  • read(char() array, int start, int length) - lê o número de caracteres igual ao comprimento do leitor e armazena na matriz especificada a partir do início

Por exemplo, suponha que temos um arquivo denominado 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(); ) ) ) 

Resultado

 Dados no fluxo: Esta é uma linha de texto dentro do arquivo. 

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()método 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(); ) ) ) 

Resultado

 A codificação de caracteres de input1: Cp1252 A codificação de caracteres de input2: UTF8 

No exemplo acima, criamos 2 leitores de fluxo de entrada chamados input1 e input2.

  • input1 não especifica a codificação de caracteres. Portanto, o getEncoding()método retorna o nome canônico da codificação de caracteres padrão.
  • input2 especifica a codificação de caracteres, UTF8 . Portanto, o getEncoding()método retorna a codificação de caracteres especificada.

Nota : 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. Depois que o close()método é 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 para o ponto no riacho onde a marca foi definida

Para saber mais, visite Java InputStreamReader (documentação oficial do Java).

Artigos interessantes...