我的问题与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()方法之前它不会引用称为一行的标记。这有可能的解决方法吗?我很感激帮助!
答案 0 :(得分:1)
由于您知道doSomething()
来电mark()
,因此在此之前调用mark()
毫无意义。
您可以从同一个字符串中创建新的StringReader
,而不是重置StringReader
。
答案 1 :(得分: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);