Read N Characters Given Read4 II - Call multiple times
public class Solution extends Reader4 {
private char[] tmpBuf = new char[4];
private boolean endOfFile = false;
private int offset = 0;
private int remaining = 0;
public int read(char[] buf, int n) {
int currIndex = 0;
while ((!endOfFile || remaining > 0) && n > currIndex) {
int readChars = 0;
if (remaining != 0) {
readChars = remaining;
} else {
offset = 0;
readChars = read4(tmpBuf);
if (readChars != 4) {
endOfFile = true;
}
}
int length = Math.min(n - currIndex, readChars);
for (int i = offset; i < offset + length; ++i) {
buf[currIndex++] = tmpBuf[i];
}
remaining = readChars - length;
if (remaining != 0) {
offset += length;
}
}
return currIndex;
}
}