有没有办法做到这一点开箱。你可以写一个装饰器来完成它,也许有一堆标记。但是,如果你关心的只是阅读和倒带,我认为一个更容易的实现是使用列表来维护“历史”和“推回”。
我认为这说明它会比德Codez更多的线,所以这里是在执行第一切口(这是不生产质量的代码,其中之一就是,它不限制历史记录列表,让你很容易耗尽内存):
import java.io.BufferedReader;
import java.io.IOException;
import java.util.LinkedList;
public class ReaderBuffer
{
private BufferedReader reader;
private LinkedList<String> history = new LinkedList<String>();
private LinkedList<String> future = new LinkedList<String>();
public ReaderBuffer(BufferedReader reader)
{
this.reader = reader;
}
public String readLine()
throws IOException
{
String line = null;
if (future.size() > 0)
line = future.removeFirst();
if (line == null)
line = reader.readLine();
if (line != null)
history.add(line);
return line;
}
public void rewind(int numLines)
{
for (int ii = 0 ; ii < numLines ; ii++)
future.addFirst(history.removeLast());
}
}
而这里的它是如何使用的例子:
@Test
public void testRewind() throws Exception
{
BufferedReader rdr = new BufferedReader(new StringReader("foo\nbar\nbaz\n"));
ReaderBuffer buf = new ReaderBuffer(rdr);
assertEquals("foo", buf.readLine());
assertEquals("bar", buf.readLine());
assertEquals("baz", buf.readLine());
assertEquals(null, buf.readLine());
buf.rewind(2);
assertEquals("bar", buf.readLine());
assertEquals("baz", buf.readLine());
assertEquals(null, buf.readLine());
}
'BufferedReader'可能是不是真的意味着处理这种情况。或许你自己将解析的数据保存在内存中,也可以放在'List'中。 –
millimoose
2013-03-14 21:48:18