我有一个FileInputStream。我想从中读取面向字符的线性数据,直到找到特定的分隔符。然后,我想将FileInputStream,与分隔线结束后立即设置的当前位置一起传递给需要InputStream的库。
我可以使用BufferedReader一次一行地遍历文件,一切都很好。但是,这会将基础文件流保留在
中BufferedReader br = new BufferedReader(new InputStreamReader(myFileStream))
在一个非确定性的位置 - BufferedReader必须向前看,我不知道有多远,而且AFAICT没有办法告诉BufferedReader将底层流回滚到最后返回的行之后。
this是最佳解决方案吗?拥有ReaderInputStream(BufferedReader(InputStreamReader(FileInputStream)))
似乎很疯狂,但这是我见过的唯一避免自己滚动的方法。我真的很想避免在可能的情况下编写自己的整个流 - 读取行实现。
答案 0 :(得分:1)
你无法解密缓冲的阅读器。您必须在应用程序的生命周期中使用相同的包装器。在你的情况下,我会使用
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
String line = dis.readLine();
虽然DataInputStream.readLine()
已被弃用,但如果您小心,它可能对您有用。否则,您只能选择自己读取字节并使用所需的编码解析文本。