Flujo de Datos con InputStreamReader

Iniciado por SDCC, 25 Septiembre 2018, 19:22 PM

0 Miembros y 1 Visitante están viendo este tema.

SDCC

Muy buenas tardes, dias o noches.He estado investigando sobre la gran variedad de clases que existen en java para el manejo de flujos, se me presento el problema de leer carácter ingresados desde la consola y lo realice con el siguiente código:

Código (java) [Seleccionar]

import java.io.*;
class prueba{

    public static void main(String args[]){

        try{
           
           char c;
           InputStreamReader leer = new InputStreamReader(System.in);
           
            System.out.println("Ingresa Caracter 1: ");
           
            c= (char)leer.read();
            leer.read();
            leer.read();

            System.out.println("Caracter Ingresado: " +c);
            System.out.println("Ingresa Caracter 2: ");
            c= (char)leer.read();
            System.out.println(leer.read());    //Nueva Linea
            System.out.println(leer.read());    //Retorno de carro
           
           

            System.out.println("Caracter Ingresado: " +c);

            System.out.println("Ingresa Caracter 3: ");
            c= (char)leer.read();
            leer.read();
            leer.read();
            System.out.println("Caracter Ingresado " +c);
        */   
           
        }catch(Exception e){
            System.out.println("Error"+e);
        }
       
    }
}


Al finalizar el programa logre capturar caracteres ingresados por consola pero me creo desconfianza el hecho de que necesitara 3 métodos read() para recolectar un carácter.Entiendo que el primer read es para obtener el carácter que deseamos, el segundo seria para recoger el "Enter" o carácter de nueva linea , pero cuando llegamos al 3er read realmente ya no sé por que es necesario.Investigando un poco mas he decidido agregar en el código 2 System.out.println(leer.read()) justo después de que leo el segundo carácter para intentar descifrar que es lo que realmente esta capturando.Efectivamente el programa me regreso dos valores numéricos que al yo relacionarlos con un valor de unicode di a la conclusión de que era el valor tanto del carácter de nueva linea , asi como el de retorno de esta manera tendría que para leer un carácter se necesita en realidad leer 3 caracteres para no dejar valores basura.El primero seria para el carácter que deseamos, el segundo para el carácter de nueva linea y el tercero para el carácter de retorno.

A partir de lo anterior no he comprendido por que en java al momento de escribir en consola realmente me esta colocando el carácter que  escribo, el carácter de nueva linea y el carácter de retorno de carro , cuando en otros lenguajes como en C  , recuerdo que simplemente bastaba con poner un getchar(); para recolectar el carácter de nueva linea y no tenia que preocuparme por un carácter de retorno debido a que el carácter de nueva linea ya era prácticamente una nueva linea con retorno de carro.De antemano les agradezco por el tiempo que les ha tomado leer esto y les agradecería si me podrian resolver esta duda