使用InputStream读取文件的一行

3

由于以前的实现要求,我必须使用InputStream,无法使用BufferedReader

我的测试工作台使用了BufferedReader和while循环,如下所示:

while ((line = br.readLine()) != null)

然而,现在需要将br作为InputStream(并且将被重命名)。有没有一种方法可以使用InputStream以这种方式读取,或者我必须逐字节读取并搜索\n


可能是 https://dev59.com/UHVC5IYBdhLWcg3wZwJT 的重复问题。 - kushagra mittal
2个回答

7
如果您必须使用InputStream进行阅读,则将其包装到InputStreamReader中,然后将其包装在BufferedReader中,这样您就可以使用熟悉的BufferedReader方法。在这种情况下,没有必要进行非缓冲输入。
// assuming that you have an InputStream named inputStream
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
    String line = null;
    while((line = br.readLine()) != null) {
        // use line here
    }
} catch (IOException e) {
    e.printStackTrace();
}

或者,将InputStream包装在Scanner对象中:
try (Scanner scanner = new Scanner(inputStream)) {
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        // use line here
    }
} 

1
你可以像这样更改代码:

您可以像这样更改代码:

    public String readLine(InputStream inputStream) throws IOException {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int r;

        for (r = inputStream.read(); r != '\n' && r != -1 ; r = inputStream.read()) {
            baos.write(r);
         }

        if (r == -1 && baos.size() == 0) {
           return null;
         }

        String lines = baos.toString("UTF-8");
        return lines;
        }

也许这个例子可以帮助你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接