Eu gostaria de saber como funciona o método read() do System.in . Notei que o funcionamento dele é diferente do método read() do FileInputStream. Pra falar a verdade é muito curioso até.
Por exemplo, observem o código abaixo:
try {
intEntrada = System.in.read();
}
catch (Exception e)
{
System.out.println("Erro Interno:" + e.getMessage());
}
charEntrada = (char)intEntrada;
texto += charEntrada;
Neste caso a classe irá ficar esperando uma entrada via teclado. Suponha que eu digite PORTALJAVA e pressionei ENTER, a variável texto terá somente o carctere P . Quando encontra o método read() o JAVA fica esperando o ENTER ser pressionado para continuar a execução do resto do código. Até aí tudo bem.
Agora observem isto:
[code]do
{
try {
intEntrada = System.in.read();
}
catch (Exception e)
{
System.out.println("Erro Interno:" + e.getMessage());
}
charEntrada = (char)intEntrada;
texto += charEntrada;
} while (charEntrada != ‘\n’);[/code]
Notem que nada mais é do que o mesmo código anterior mas com um LOOP que só deixa sair quando encontrar a quebra de linha ou nesse caso , o ENTER. Entrando com a mesma string PORTALJAVA, dessa vez o resultado da variável texto no final da execução, será PORTALJAVA. A minha dúvida é : Como o java consegue parar a execução e esperar uma entrada só da primeira vez que ele encontra o read() ??? Como ele sabe que das próximas vezes que encontrar o read() não é para esperar uma entrada e sim para pegar o próximo byte do que já foi digitado ??? Procurei “literatura” sobre isso mas não consegui nada que sanasse essa minha dúvida.
Espero ter sido claro, não é uma dúvida muito fácil de se perguntar como podem ver.
Obrigado