如何读取 BufferedInputStream 中的一行?

我正在编写一个代码来使用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 GiantInputTest 5452 5


答案 1

缓冲输入流用于读取字节。阅读一行涉及阅读字符

您需要一种方法将输入字节转换为由字符集定义的字符。因此,您应该使用将字节转换为字符并从中读取字符的a。BufferedReader 还有一个 readLine() 方法,该方法读取整行,请使用:Reader

BufferedInputStream bf = new BufferedInputStream(System.in)

BufferedReader r = new BufferedReader(
        new InputStreamReader(bf, StandardCharsets.UTF_8));

String line = r.readLine();
System.out.println(line);

答案 2

您可以在 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();
    }
}

但请记住,此解决方案比使用效率低下,因为为每个字符读取进行系统调用BufferedReaderInputStream.read()


推荐