从Java FileInputStream中读取行而不会丢失我的位置

时间:2013-09-28 13:49:01

标签: java stream bufferedreader

我有一个FileInputStream。我想从中读取面向字符的线性数据,直到找到特定的分隔符。然后,我想将FileInputStream,与分隔线结束后立即设置的当前位置一起传递给需要InputStream的库。

我可以使用BufferedReader一次一行地遍历文件,一切都很好。但是,这会将基础文件流保留在

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

String line = dis.readLine();

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