J'écris un code pour lire l'entrée de l'utilisateur en utilisant BufferedInputStream, mais comme BufferedInputStream lit les octets, mon programme ne lit que le premier octet et l'imprime. Existe-t-il un moyen de lire/stocker/imprimer l'intégralité de l'entrée (qui sera Integer) en plus de lire uniquement le premier octet?
import Java.util.*;
import Java.io.*;
class EnormousInputTest{
public static void main(String[] args)throws IOException {
BufferedInputStream bf = new BufferedInputStream(System.in) ;
try{
char c = (char)bf.read();
System.out.println(c);
}
finally{
bf.close();
}
}
}
Production:
[shadow @ localhost codechef] $ Java EnormousInputTest 5452 5
Un BufferedInputStream
est utilisé pour lire octets . La lecture d'une ligne implique la lecture de caractères .
Vous avez besoin d'un moyen de convertir les octets d'entrée en caractères qui est défini par un jeu de caractères . Vous devez donc utiliser un Reader
qui convertit les octets en caractères et à partir desquels vous pouvez lire les caractères. BufferedReader
a également une méthode readLine()
qui lit une ligne entière, utilisez-la:
BufferedInputStream bf = new BufferedInputStream(System.in)
BufferedReader r = new BufferedReader(
new InputStreamReader(bf, StandardCharsets.UTF_8));
String line = r.readLine();
System.out.println(line);
Vous pouvez l'exécuter dans une boucle while.
Essayez le code ci-dessous
BufferedInputStream bf = new BufferedInputStream(System.in) ;
try{
int i;
while((i = bf.read()) != -1) {
char c = (char) i;
System.out.println(c);
}
}
finally{
bf.close();
}
}
Mais gardez à l'esprit que cette solution est inefficace que d'utiliser BufferedReader
puisque InputStream.read()
fait un appel système pour chaque caractère lu