web-dev-qa-db-fra.com

Comment lire une ligne dans BufferedInputStream?

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

18
PankajKushwaha

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);
33
icza

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

3
sam_eera