3

我有一个文件输入流。我想从中读取面向字符的逐行数据,直到找到特定的分隔符。然后,我想将 FileInputStream(当前位置设置在分隔符行末尾之后立即设置)传递给需要 InputStream 的库。

我可以使用 BufferedReader 一次遍历文件一行,一切正常。但是,这会将底层文件流留在

BufferedReader br = new BufferedReader(new InputStreamReader(myFileStream))

在一个不确定的位置—— BufferedReader 必须向前看,我不知道多远,而且 AFAICT 没有办法告诉 BufferedReader 将底层流倒回到最后返回的行之后。

这是最好的解决方案吗?拥有一个似乎很疯狂,ReaderInputStream(BufferedReader(InputStreamReader(FileInputStream)))但这是我见过的唯一避免自己滚动的方法。如果可能的话,我真的很想避免编写我自己的整个流式读取行实现。

4

1 回答 1

1

您不能取消缓冲缓冲的阅读器。您必须在应用程序的生命周期中使用相同的包装器。在你的情况下,我会使用

DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));

String line = dis.readLine();

虽然DataInputStream.readLine()已弃用,但如果您小心,它可能对您有用。否则,您唯一的选择是自己读取字节并使用所需的编码解析文本。

于 2013-09-28T14:02:16.763 回答