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
BufferedInputStream
は、bytesの読み取りに使用されます。行の読み取りには、文字の読み取りが含まれます。
入力バイトをcharsetで定義される文字に変換する方法が必要です。したがって、バイトを文字に変換し、そこから文字を読み取ることができる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();
}
}
ただし、InputStream.read()
は読み取った文字ごとにシステムコールを実行するため、このソリューションはBufferedReader
を使用するよりも非効率的です。