1

我的问题与 Java 的 StringReader 的 mark() 方法有关。这是我的场景:

StringReader reader = new StringReader("Test123");

reader.mark(0);
boolean bool = doSomething(reader)//reads from reader with calls to mark() inside
if (bool == false) {
    reader.reset();
}

doSomethingElse(reader);

如果 doSomething() 返回 false,我想将阅读器恢复到原始状态。因为 reset() 只会将阅读器重置回之前调用的标记,并且在 doSomething() 方法中调用了标记,所以它不引用在进入 doSomething() 方法之前调用的标记。有没有可能的解决方法?感谢您的帮助!

4

2 回答 2

1
  1. 既然你知道doSomething()call mark(),那么在那之前打电话是没有意义的mark()

  2. 而不是重置StringReader,您可以StringReader从相同的字符串创建一个新的。

于 2014-12-09T15:38:31.127 回答
0

简单的解决方案是在重置之前对其进行标记:

StringReader reader = new StringReader("Test123");

boolean bool = doSomething(reader)//reads from reader with calls to mark() inside
if (bool == false) {
    reader.mark(0);
    reader.reset();
}

doSomethingElse(reader);

如果你不能这样做,你可以将初始标记位置和阅读器包装在一个自定义对象中:

class MyReader {
   private int mark = 0;
   private StringReader reader;

   MyReader( StringReader reader, int mark ) {
      this.reader = reader;
      this.mark = mark;
   }

   public StringReader getReader() { return reader; }

   public void hardReset() {
      reader.mark(mark);
      reader.reset();
   }
}

你会像这样使用它:

StringReader reader = new StringReader("Test123");
MyReader mr = new MyReader( reader, 0 );
boolean bool = doSomething(mr); // mr.getReader().mark(i); 
if (bool == false) {
     mr.hardReset();
}

doSomethingElse(mr);
于 2014-12-09T15:42:16.927 回答