Как прочитать строку в 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() сделать системный вызов для каждого прочитанного символа

Другие вопросы по тегам