Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2016, 16:19
Avatar de BramSt
BramSt
 
Fecha de Ingreso: abril-2015
Mensajes: 117
Antigüedad: 9 años
Puntos: 5
Pregunta Problema para entender InputStream y los Reader para leer por teclado

Hola a todos.



Nos están explicando en clase el tema del inputStream y los Reader, para cómo leer por teclado, pero tras mucho desgañitarme y tratar de entenderlo con tutoriales y por mi cuenta, no consigo aclararme, así que así que a ver si podeis ayudarme:


La manera (sin usar Scanner) que se utiliza para leer por teclado y mostrar una cadena en pantalla es la siguiente:

Código Java:
Ver original
  1.  
  2.  
  3. try
  4.         {
  5.             String cadena = br.readLine();
  6.             System.out.println("cadena: " + cadena);
  7.             System.out.println("br directo: " + br.readLine());
  8.         } catch (IOException e)
  9.         {
  10.            
  11.             e.printStackTrace();
  12.         }


Hasta aquí todo correcto, ¿no?

Bueno, veis en el código que dentro del try, he hecho dos System.out, uno pasando la cadena y otro directamente br.readLine()

Lo que me tiene un poco loco es que, en system.out que pasamos la cadena, si pongo “Hola”, sólo devuelve el texto”cadena: ola”.

Mientras que en el que pasamos el br.readLine(), muestra correctamente la cadena que hayamos introducido por teclado. Ej.”br directo: hola”.

Y las dudas son:

-¿Por qué la cadena “recoge” todos los caracteres menos el primero, que es el que además se supone que pasamos mediante System.in al crear el objeto isr? ¿No se supone que InputStream sólo es capaz de leer un carácter, o mejor dicho, su equivalente en ASCII?

¿Por qué tengo que almacenar lo que devuelva br.readLine() en una variable de tipo String (cadena), y sobre todo, por qué al hacer System.out.println no muestra lo mismo si pasamos la variable cadena que si pasamos directamente el br.readLine()?


Lo digo porque hasta ahora siempre podía pasar al System.out.println tanto una variable como una operación aritmética como un método y no habia pegas. O sea, es lo mismo hacer:

Código Java:
Ver original
  1. int a=2+2;
  2.        
  3.     System.out.println(a);

que hacer:

Código Java:
Ver original
  1. System.out.println(2+2);

O es lo mismo hacer:

Código Java:
Ver original
  1. String b=Character.toString('b');
  2.        
  3.     System.out.println(b);

que hacer:

Código Java:
Ver original
  1. System.out.println(Character.toString('b'));

Por eso me tiene un poco (muy) desconcertado todo esto. Es extrañísimo (para mí al menos) y no sé por dónde agarrarlo



Muchas gracias por adelantado.