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