Как прочитать строку в BufferedInputStream?
Я пишу код для чтения ввода от пользователя с помощью BufferedInputStream, но поскольку BufferedInputStream читает байты, моя программа читает только первый байт и печатает его. Есть ли способ, которым я могу прочитать / сохранить / распечатать весь ввод (который будет Integer), кроме только чтения первого байта?
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();
}
}
}
Выход:
[shadow @ localhost codechef] $ java EnormousInputTest 5452 5
2 ответа
BufferedInputStream
используется для чтения байтов. Чтение строки подразумевает чтение символов.
Вам нужен способ преобразования входных байтов в символы, который определяется набором символов. Так что вы должны использовать Reader
который преобразует байты в символы и из которого вы можете читать символы. BufferedReader
также имеет readLine()
метод, который читает целую строку, используйте это:
BufferedInputStream bf = new BufferedInputStream(System.in)
BufferedReader r = new BufferedReader(
new InputStreamReader(bf, StandardCharsets.UTF_8));
String line = r.readLine();
System.out.println(line);
Вы можете запустить это внутри цикла while.
Попробуйте код ниже
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();
}
}
Но имейте в виду, что это решение неэффективно, чем использование BufferedReader
поскольку InputStream.read()
сделать системный вызов для каждого прочитанного символа