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

标签 java stream bufferedreader

我有一个 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/

相关文章:

java - 文件传输xmpp中主机="null"

c++ - 动态数组的运算符重载给出奇怪的错误

firebase - 如何在firebase firestore中准确合并多个流

java - 将 BufferedReader 应用到 Java 类的构造函数中时遇到问题

java - 使用 Java 流打印列表项

java - Java bean 的 setter 允许返回这个吗?

java - 确保每个 JAR 首先看到自己的类路径资源

node.js - pipe()后 'finish'上的nodejs空文件

Java - 读取文件夹中的所有 .txt 文件

java - 从慢速流读取时,BufferedReader.readLine() 是否可能不读取整行?