eme*_*esx 6 java groovy bufferedreader
我找不到用Java(或Groovy)编写以下代码的功能
reader.mark(); //(1)
reader.read(); //reads 'a'
reader.mark(); //(2)
reader.read(); //reads 'b'
reader.reset(); //back to (2)
reader.read(); //reads 'b'
reader.reset(); //back to (1)
reader.read(); //reads 'a'
reader.read(); //reads 'b'
Run Code Online (Sandbox Code Playgroud)
Reader.mark(int) 是一个很好的方法,但它不会堆叠标记,它只包含最新的标记..
来自Java库的支持还是我自己的支持?
所以我自己写了--.-
class CharReader {
private Stack marks;
private RandomAccessFile reader;
CharReader(File file) {
this.marks = new Stack();
this.reader = new RandomAccessFile(file, 'r');
}
void mark() {
long mark = reader.getFilePointer();
marks.push(mark);
}
void reset() {
if (marks.size() <= 0)
return
long mark = marks.pop();
reader.seek(mark);
}
char peek() {
mark();
char nextChar = next();
reset();
return nextChar;
}
char next() {
int nextChar;
if ((nextChar = nextInt()) >= 0) {
return (char) nextChar;
}
throw new IllegalStateException("Reader empty");
}
private int nextInt() {
return reader.read();
}
}
Run Code Online (Sandbox Code Playgroud)
这足以满足我的需求.仅支持单字节chars ;-)