【发布时间】:2013-09-28 13:49:00
【问题描述】:
我有一个 FileInputStream。我想从中读取面向字符的逐行数据,直到找到特定的分隔符。然后我想将 FileInputStream(当前位置设置在分隔符行末尾之后)传递给需要 InputStream 的库。
我可以使用 BufferedReader 一次遍历文件一行,一切正常。但是,这会将底层文件流留在
BufferedReader br = new BufferedReader(new InputStreamReader(myFileStream))
在一个不确定的位置 - BufferedReader 必须向前看,我不知道多远,而且 AFAICT 没有办法告诉 BufferedReader 将底层流倒回到最后返回的行之后。
this 是最好的解决方案吗?拥有ReaderInputStream(BufferedReader(InputStreamReader(FileInputStream))) 似乎很疯狂,但这是我见过的唯一避免自己滚动的方法。如果可能的话,我真的很想避免编写我自己的整个流式读取行实现。
【问题讨论】:
-
为什么不使用
Channel? -
你考虑过
InputStream.mark, reset, markSupported吗?不过有点麻烦。也许用计数器保持位置,关闭文件,然后使用skip(position - 1)左右。 -
鲍里斯:频道有什么帮助?我基本上想要一个实现 InputStream 的类,并且有一个
readLine()方法。除此之外,我想要一个具有readLine()方法和InputStream构造函数的类,在每次readLine()调用后将传递的流留在“正确”位置。
标签: java stream bufferedreader