// already have some bytes buffered, just return those
ByteList result = bufferedRead(Math.min(buffer.remaining(), number));
if (ungotc >= 0) {
result.prepend((byte)ungotc);
ungotc = -1;
}
return result;
} else {
// otherwise, we try an unbuffered read to get whatever's available