in src/main/java/org/apache/commons/io/input/UnsynchronizedBufferedInputStream.java [193:224]
private int fillBuffer(final InputStream localIn, byte[] localBuf) throws IOException {
if (markPos == IOUtils.EOF || pos - markPos >= markLimit) {
/* Mark position not set or exceeded readLimit */
final int result = localIn.read(localBuf);
if (result > 0) {
markPos = IOUtils.EOF;
pos = 0;
count = result;
}
return result;
}
if (markPos == 0 && markLimit > localBuf.length) {
/* Increase buffer size to accommodate the readLimit */
int newLength = localBuf.length * 2;
if (newLength > markLimit) {
newLength = markLimit;
}
final byte[] newbuf = new byte[newLength];
System.arraycopy(localBuf, 0, newbuf, 0, localBuf.length);
// Reassign buffer, which will invalidate any local references
// FIXME: what if buffer was null?
localBuf = buffer = newbuf;
} else if (markPos > 0) {
System.arraycopy(localBuf, markPos, localBuf, 0, localBuf.length - markPos);
}
// Set the new position and mark position
pos -= markPos;
count = markPos = 0;
final int bytesread = localIn.read(localBuf, pos, localBuf.length - pos);
count = bytesread <= 0 ? pos : pos + bytesread;
return bytesread;
}