package org.archive.format.gzip.zipnum;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import org.archive.util.iterator.CloseableIterator;
public class LineBufferingIterator implements CloseableIterator<String> {
protected CloseableIterator<String> inner;
protected int maxLines;
protected Iterator<String> currIter;
public LineBufferingIterator(CloseableIterator<String> inner, int maxLines)
{
this.inner = inner;
this.maxLines = maxLines;
}
public void bufferInput()
{
if (currIter != null) {
return;
}
LinkedList<String> lineBuffer = new LinkedList<String>();
while (inner.hasNext() && (lineBuffer.size() < maxLines)) {
lineBuffer.add(inner.next());
}
currIter = lineBuffer.iterator();
try {
inner.close();
inner = null;
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean hasNext() {
if (currIter == null) {
bufferInput();
}
return currIter.hasNext();
}
@Override
public String next() {
return currIter.next();
}
@Override
public void close() throws IOException {
//Nothing to close, inner iter already closed!
}
@Override
public void remove() {
}
}