Java - DataInputStream no captura lo que deseo

 
Vista:

DataInputStream no captura lo que deseo

Publicado por manuel (10 intervenciones) el 10/05/2003 23:37:05
tengo lo sgte:
1 import java.io.*;
2 class sample
3 {
4 public static void main(String args[])
5 throws IOException
6 {
7 int val;
8 DataInputStream in= new DataInputStream(System.in);
9 val= in.readInt();
10 System.out.println(val);
11 }
12 }
(los numeros no cuentan)
cuando se ejecuta la linea 9 y por ejemplo ingreso SOLO un digito mas enter, aparentemente espera otra entrada, y tengo que entrar otro digito.
ello no sucede si ingreso mas de un digito a la vez.
la linea 10 no imprime el valor que ingrese. Me imprime un valor bastante grande.
Ya probe en las lineas 9 y 10, haciendo casting.
He visto en los manuales y la definicion de DataInputStream esta correcta.
Donde esta el error?
Ademas en los manuales dice que esta seria la forma de capturar valores de tipo primitivo(int, byte, float, char, etc)
O hay otra forma?
saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DataInputStream no captura lo que deseo

Publicado por chuidiang (532 intervenciones) el 11/05/2003 07:01:32
Los métodos de DataInputStream suponen que están leyendo bytes. En concreto, readInt() lee 4 bytes y los transforma a entero. Si escribes un dígito y enter, son dos bytes y faltan otros dos (el código ascii del dígito y el byte del retorno de carro). Si tecleas 3 caracteres (los que sean) y enter, si será capaz de leer el entero, pero tendrá un valor grande, como tu dices.

Debes leer todo con readBytes() (no se como se llama exactamente), luego convertir cada byte a char (para hacer un String) y hacer conversiones del estilo Interger.toString().

Puedes probar, aunque seguramente no te valga, a leer directamente readChar(), pero creo que en java un char son dos bytes (por aquello del unicode), así que tendrás algo parecido a lo del entero.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

entonces...

Publicado por manuel (10 intervenciones) el 11/05/2003 12:03:12
en ese caso, podria leerlo con ReaderBuffer(para caracteres y string)? y despues lo transformo a primitivos?. Estuve tentando de esta forma, y pude capturar las entradas como <String solamente> y de alli los transformo a int, char (por lo menos funciono para char y int), aunque parece un poco arcaico:). Bueno, es para probar entradas para files.
Ahora estoy viendo la swing. En la documentacion recomiendan comenzar a usar swing antes que awt. Pero no entendi (por completo) la razon.
Estuve practicando con los JTextFields, JButton. Los valores de los 'fields' son todos String, verdad? Entonces tengo que hacer una conversion, no es? Pero como hago para 'pasar' esos valores a <<otro>> programa, que tiene mis clases y mis archivos. O hay otra forma de hacerlo mejor? O como es la forma que se comunican los applets con los otros programas(que tienen las clases, manejan files).
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:entonces...

Publicado por chuidiang (532 intervenciones) el 11/05/2003 23:39:45
En java tienes muchas clases para que las juntes como quieras. Lo del ReaderBuffer, si te funciona, vale. Lo que tienes que hacer es una clase que mezcle estas y funcione de forma cómoda como tú quieras, de manera que no tengas que andar haciendo conversiones cada vez que quieras leer un entero.

Awt es una versión más primitiva de swing. Swing está construida sobre awt y se supone que la mejora. Es mejor usar swing (es más completo), pero este necesitará cosas de awt. Hay una diferencia curiosa entre un botón de swing y uno de awt. El botón de swing, salvo que indiques otra cosa, tiene aspecto de botón java. El botón awt tiene el aspecto de los botones del sistema operativo en el que lo lances, no tiene aspecto propio. El mismo ejecutable en awt cambia de aspecto según el sistema operativo en el que lo arranques.

Cuando lees los datos del teclado, debes transformarlos a int o a lo que necesites y pasárselo a otras clases de esta manera. Sólo cuando quieras ponerlos en un JTextField, los vuelves a convertir a String. Para ello tienes Integer.toString().

Si vas a escribir datos en un fichero, salvo que tengas interés en que se entienda al editarlo (con el notepad, por ejemplo), no es necesario convertir los enteros a string. Con la clase que escribe el entero como cuatro bytes te vale, aunque luego tendrás que leerlo con la equivalente de lectura.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar