web-dev-qa-db-fra.com

Méthode DataInputStream obsolète readLine ()

Je suis sur Java 6. Utilisation de DataInputStream in = new DataInputStream(System.in); pour lire les entrées de l'utilisateur. Lorsque readLine () est obsolète. Quelle est la solution pour la lecture de la valeur utilisateur?

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)
{
}

veuillez expliquer comme il se doit lorsque readLine () est obsolète.

26
Some Java Guy

InputStream est fondamentalement une construction binaire. Si vous souhaitez lire des données text (par exemple, à partir de la console), vous devez utiliser une variable Reader contenant une description. Pour convertir une InputStream en une Reader, utilisez InputStreamReader. Créez ensuite une BufferedReader autour de la Reader et vous pourrez lire une ligne en utilisant BufferedReader.readLine().

Plus d'alternatives:

  • Utilisez un Scanner construit autour de System.in et appelez Scanner.nextLine
  • Utilisez une Console (obtenue à partir de System.console()) et appelez Console.readLine
30
Jon Skeet

La dépréciation et les alternatives sont généralement déjà expliquées de manière explicite dans javadocs . Ce serait donc le premier endroit où chercher la réponse. Pour DataInputStream, vous pouvez le trouver ici . La méthode readLine() est ici . Voici un extrait de pertinence:

Obsolète. Cette méthode ne convertit pas correctement les octets en caractères. A partir de JDK 1.1, la méthode préférée pour lire les lignes de texte est via la méthode BufferedReader.readLine(). Les programmes qui utilisent la classe DataInputStream pour lire les lignes peuvent être convertis pour utiliser la classe BufferedReader en remplaçant le code de la forme:

    DataInputStream d = new DataInputStream(in);

avec:

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

Le codage des caractères peut alors être explicitement spécifié dans le constructeur de InputStreamReader.

Le Scanner qui a été introduit depuis Java 1.5 est également une bonne alternative (et moderne).

24
BalusC

Le dessous ne fonctionne pas,

num = Integer.parseInt(in);

Au lieu de cela, vous devriez utiliser:

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

readLine() lit une entrée de ligne jusqu'au saut de ligne.

0
user3950170