我正在编写一个代码来使用BufferedInputStream来读取用户的输入,但是当BufferedInputStream读取字节时,我的程序只读取第一个字节并打印它。 有没有什么方法可以读取/存储/打印整个输入(这将是整数)除了只读取第一个字节?
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
答案 0 :(得分:31)
BufferedInputStream
用于读取字节。阅读一行涉及阅读字符。
您需要一种方法将输入字节转换为由 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);
答案 1 :(得分:3)
你可以在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()
为每个字符读取进行系统调用