有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:在一个输入流上使用两个读卡器

我的应用程序可以编辑一种名为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字节。这会导致第InputStream行“problembly#2”处的^{为空,并且位于错误的位置,而我希望它继续运行,就像只读取了文件的第一行一样。在TDAEntry的构造函数中,我可能想在流上构造另一种读取器,或者做其他事情

一个显而易见的解决方案是编写一个新的解码器,它不会占用前面的字节。但我想知道有没有更简单的方法。你会如何解决这个问题,或者你会建议另一种编程结构来完成同样的事情

非常感谢


共 (1) 个答案

  1. # 1 楼答案

    把读者递过来就行了。它将继续阅读它停止的地方:

    TDAEntry entry = new TDAEntry(form, entryReader);