Para realizar operações de I/O com base em caracteres, o Java fornece uma hierarquia própria de fluxos baseados em caracteres, com classes abstratas como Reader e Writer. Essas classes permitem a leitura e escrita diretamente de caracteres, sendo mais adequadas para dados de texto do que os fluxos de bytes. Os métodos principais dessas classes lidam com operações de leitura e escrita e podem lançar IOException em caso de erro.
Estrutura de Fluxos de Caracteres
Classes Abstratas Principais:
- Reader: Base para leitura de caracteres.
- Writer: Base para escrita de caracteres.
Essas classes formam a estrutura mínima de operações de I/O para fluxos de caracteres, com métodos aplicáveis a todas as subclasses.
Entrada do Console com Fluxos de Caracteres
Para programas internacionalizados ou que manipulam texto, é preferível ler caracteres do console usando fluxos de caracteres. Como System.in é um fluxo de bytes, ele precisa ser adaptado para fluxos de caracteres.
Para isso, usamos:
- InputStreamReader: Converte bytes para caracteres.
- BufferedReader: Melhora a eficiência ao armazenar a entrada em buffer.
Exemplo de Leitura de Entrada do Console
Para ler a entrada do console com BufferedReader, primeiramente, convertemos System.in em um fluxo de caracteres usando InputStreamReader:
import java.io.*;
public class ConsoleReaderExample {
public static void main(String args[]) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("Digite uma linha de texto: ");
String linha = reader.readLine();
System.out.println("Você digitou: " + linha);
} catch(IOException e) {
System.out.println("Erro de entrada/saída: " + e);
}
}
}
Explicação do Código
- InputStreamReader: Converte o fluxo de bytes de System.in para um fluxo de caracteres.
- BufferedReader: Utilizado para leitura eficiente de caracteres, strings e linhas.
Vantagens dos Fluxos de Caracteres
- Internacionalização: Compatíveis com diferentes conjuntos de caracteres.
- Eficiência: BufferedReader permite ler uma linha inteira de uma vez, simplificando o processo e reduzindo chamadas de sistema.
Esses fluxos de caracteres facilitam o tratamento de textos e são ideais para entrada de dados e manipulação de arquivos em que caracteres e texto são o foco principal.
Top comments (1)
This is a very helpful explanation of character-based streams in Java! It's great to see examples like the console reader, which makes the concepts more practical.