如何读取BufferedInputStream中的一行?

时间:2014-10-17 06:58:54

标签: java input user-input 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 EnormousInputTest 5452 5

2 个答案:

答案 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()为每个字符读取进行系统调用