2011-04-10 13 views
23

Estoy en java 6. Utilizo DataInputStream in = new DataInputStream(System.in); para leer la entrada del usuario. Cuando readLine() está en desuso. ¿Cuál es el trabajo para leer el valor del usuario?DataInputStream obsoleto readLine() método

DataInputStream in = new DataInputStream(System.in); 
int num; 
try 
{ 
    num = Integer.parseInt(in.readLine()); //this works 

    num = Integer.parseInt(in); //just in doesnt work. 
} 
catch(Exception e) 
{ 
} 

explique como debería cuando readLine() está en desuso.

+0

Incluya un caso de prueba compilable (o un caso de prueba anómalo con el error correspondiente) la próxima vez. –

+0

¿Caso de prueba? Estamos hablando de desaprobación. Coloca el código anterior en un editor y cambia la línea a amarilla y dice "readLine está en desuso". Nadie necesita un caso de prueba para saber que un método Java está en desuso. Aquí está la advertencia aplicable: https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html#readLine() –

Respuesta

29

InputStream es fundamentalmente una construcción binaria. Si desea leer texto datos (por ejemplo, desde la consola), debe utilizar un Reader de alguna descripción. Para convertir un InputStream en un Reader, use InputStreamReader. Luego crea un BufferedReader alrededor del Reader, y puedes leer una línea usando BufferedReader.readLine().

Más alternativas:

  • utilizar un Scanner construido alrededor de System.in, y llamar a Scanner.nextLine
  • Utilice un Console (obtenido de System.console()) y llamar a Console.readLine
23

Deprecation y las alternativas es por lo general ya explícitamente explicado en el javadocs. Entonces, sería el primer lugar para buscar la respuesta. Para DataInputStream lo puedes encontrar here. El método readLine() es here. Aquí hay un extracto de relevancia:

Deprecated. Este método no convierte correctamente bytes a caracteres. A partir de JDK 1.1, la forma preferida de leer líneas de texto es a través del método BufferedReader.readLine(). Los programas que utilizan la clase DataInputStream para leer las líneas pueden ser convertidos para utilizar la clase BufferedReader mediante la sustitución de código de la forma:

DataInputStream d = new DataInputStream(in); 

con:

BufferedReader d 
     = new BufferedReader(new InputStreamReader(in)); 

La codificación de caracteres a continuación, se puede especificar explícitamente en el constructor de InputStreamReader.

El Scanner que se introdujo desde Java 1.5 también es una buena alternativa (y moderna).

1

La continuación no funciona,

num = Integer.parseInt(in); 

lugar debe usar:

num = Integer.parseInt(in.readLine()); 

readLine() leerá una entrada de línea hasta que salto de línea.