OTRAS CLASES...
Los InputStream: EL OBJETO System.in
Al
igual que Java nos ofrece System.out
para escribir en pantalla, tenemos System.in
para leer de ella. System.in es un objeto de una clase de java que se llama InputStream.
Para
java, un InputStream
es cualquier cosa de la que se leen bytes. Puede ser el teclado, un fichero, un
socket, o cualquier otro dispositivo de entrada. Esto, por un lado es una
ventaja. Si todas esas cosas son InputStream,
podemos hacer código que lea de ellas sin saber qué estamos leyendo.
Un InputStream es para leer bytes, sólo tiene métodos para leer bytes. Nosotros queremos leer palabras o números del teclado, no bytes. Si escribimos en el teclado una A mayúscula y la leemos con System.in, obtendremos un entero de valor 65, que es el valor del byte correspondiente a la A.
Un InputStream es para leer bytes, sólo tiene métodos para leer bytes. Nosotros queremos leer palabras o números del teclado, no bytes. Si escribimos en el teclado una A mayúscula y la leemos con System.in, obtendremos un entero de valor 65, que es el valor del byte correspondiente a la A.
Los Reader
Para
java, una clase Reader
es una clase que lee caracteres. Esto se parece más a lo que queremos. Un Reader tiene métodos
para leer caracteres. Con esta clase ya podriamos trabajar. La pena es que
seguimos teniendo System.in,
que es un InputStream
y no un Reader.
¿Cómo convertimos el System.in en Reader?. Hay una clase en java, la InputStreamReader, que nos hace esta conversión. Para obtener un Reader, únicamente tenemos que instanciar un InputStreamReader pasándole en el constructor un InputStream. El código es el siguiente
¿Cómo convertimos el System.in en Reader?. Hay una clase en java, la InputStreamReader, que nos hace esta conversión. Para obtener un Reader, únicamente tenemos que instanciar un InputStreamReader pasándole en el constructor un InputStream. El código es el siguiente
InputStreamReader
isr = new InputStreamReader(System.in);
Estamos
declarando una variable "isr" de tipo InputStreamReader. Creamos un objeto de
esta clase haciendo new
InputStreamReader(...). Entre paréntesis le pasamos el InputStream que
queremos convertir a Reader,
en este caso, el System.in
Ya
tenemos el Reader.
¿Cómo funciona exactamente?
- InputStreamReader es un Reader. Se
comporta igual que in Reader
y se puede poner en cualquier sitio que admita un Reader. Es decir,
podemos leer de él caracteres.
- Al
constuirlo le hemos pasado un InputStream,
en concreto, System.in.
InputStreamReader
de alguna forma se lo guarda dentro.
- Cuando
a InputStreamReader
le pedimos caracteres, él le pide al InputStream que tiene guardado
dentro los bytes, los convierte a caracteres y nos los devuelve.
LA CLASE
BufferedReader
Si usamos InputStreamReader,
como lee caracteres sueltos, Tenemos que decirle cuántos queremos (que no lo
sabemos), o bien ir pidiendo de uno en uno hasta que no haya más.
Si sólo tuvieramos la clase InputStreamReader
sería un trozo de código que tendriamos que repetir por muchos lados. Para el
caso concreto de leer de teclado, sería ideal si hubiese una clase en java que
nos lea de golpe todo lo que ha escrito el usuario de nuestro programa y nos lo
diera de un golpe.
Esa clase existe en Java y se llama BufferedReader. El
mecanismo para obtener un BufferedReader
a partir de otro Reader
cualquiera (por ejemplo el InputStreamReader),
es similar al que usamos antes. Lo instanciamos pasándole en el construtor el Reader. El código es
BufferedReader br = new BufferedReader (isr);
El
funcionamiento de esta clase es igual que el InputStreamReader. Cuando le pedmos una
línea completa de caracteres (un String),
ella se lo pide al Reader
que tenga dentro, los convierte en String
y nos lo devuelve.
Para
pedirle un String,
se usa el método readLine().
Este método lee todos los caracteres tecleados (recibidos si fuera otro
dispositivo de entrada) hasta que encuentra la pulsación de la tecla , o como
quieras llamarla.
String texto =
br.readLine();
Esto
lee del teclado un String
completo y lo guarda en una variable "texto".
http://www.chuidiang.com/java/novatos/entrada_standard_java.php
No hay comentarios:
Publicar un comentario