gpt4 book ai didi

Java:在一个 InputStream 上使用两个 Reader

转载 作者:行者123 更新时间:2023-11-29 07:55:07 25 4
gpt4 key购买 nike

我的应用程序可以编辑一种名为 TDAEntry 的文本文件。每个此类条目都基于描述其格式的另一种文件类型,称为 TDAFormTDAEntry 文本文件的第一行是它所属的表单的名称,然后是其余数据(以文本形式)。

现在要打开这样一个文件,这是我的代码,经过简化:

InputStream entryInput = new FileInputStream(file);

BufferedReader entryReader = new BufferedReader(
new InputStreamReader(entryInput)); // PROBLEMATIC #1

String formName = entryReader.readLine();

TDAForm form = new TDAForm(formName);

// create an entry with the right form and the data which follows in entryInput
TDAEntry entry = new TDAEntry(form, entryInput); // PROBLEMATIC #2

问题来了。在阅读 InputStreamReader 的源代码时,您最终会阅读此类的代码:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/nio/cs/StreamDecoder.java#StreamDecoder.read(char%5B%5D%2Cint%2Cint)

这是缓冲的,这意味着它提前读取了大约 8000 个字节。这会导致“Problematic#2”行的 InputStream 为空且位置错误,而我希望它继续,就好像只读取了文件的第一行一样。在 TDAEntry 的构造函数中,我可能想在流上构造另一种读取器,或者做其他事情。

一个明显的解决方案是编写一个不会耗尽前面字节的新解码器。但我想知道是否有更简单的方法来做到这一点。您将如何解决这个问题,或者您是否建议使用另一种编程结构来完成同样的事情?

非常感谢!

最佳答案

只需传入阅读器即可。它会继续阅读它停止的地方:

TDAEntry entry = new TDAEntry(form, entryReader); 

关于Java:在一个 InputStream 上使用两个 Reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com