"Olá, amigo! Você está usando as classes BufferedReader e InputStreamReader há muito tempo. Agora vamos explorar o que elas realmente fazem."

A classe InputStreamReader é um adaptador clássico da interface InputStream para a interface Reader . Também não há nada a acrescentar aqui.

Mas, em resumo, é isso que acontece. Quando você solicita (lê) o próximo caractere de um objeto InputStreamReader , ele lê alguns bytes de InputStream passados ​​para o construtor e os retorna como um caractere.

Mas o Reader não é o objeto mais conveniente para se trabalhar. Muitas vezes o que precisamos não é ler todos os caracteres inseridos pelo usuário de uma só vez, mas sim dividir esses caracteres em linhas.

"Mas a classe Reader tem um método read (CharBuffer s). Não podemos usar isso?"

"Este método lê dados em pedaços do tamanho do buffer e os coloca no objeto CharBuffer."

O texto geralmente é dividido em linhas. Portanto, o método read(CharBuffer s) pode ler várias linhas de uma só vez. Se precisarmos ler o texto exatamente até o final de uma linha (ou seja, todos os caracteres em uma linha até um caractere de nova linha), seria melhor procurar outra coisa. E existe um método alternativo. Na classe BufferedReader .

A classe BufferedReader , que é uma estrutura conveniente sobre Reader, possui um método muito conveniente: readLine() . Este método nos permite ler linhas inteiras de texto de um Reader de uma só vez. Quando você chama readLine em seu código, ele lê os caracteres do objeto Reader até encontrar um caractere de nova linha. Depois que o caractere de nova linha é encontrado, o método une esses caracteres em uma única string e a retorna.

"Eu usei isso regularmente, mas não sabia como funcionava. Agora eu sei. Obrigado, Kim."