我的问题与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,我想把我的阅读器恢复到原来的状态。因为doSomething()只会将读取器重置回先前调用的标记,并且存在从doSomething()方法内部调用的标记,所以在进入doSomething()方法之前,它不会引用一行调用的标记。有没有可能解决这个问题?非常感谢你的帮助!
发布于 2014-12-09 23:38:31
doSomething()调用mark(),因此在此之前调用mark()是没有意义的。StringReader,而不是重置StringReader。<代码>H29<代码>G210发布于 2014-12-09 23:42:17
简单的解决方案是在重置之前标记它:
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);https://stackoverflow.com/questions/27382619
复制相似问题