private int LoadBuffer(int count) {
Debug.Assert(_bufferCount + count <= (_buffer != null ? _buffer.Length : _defaultBufferSize));
int bytesRead;
if (_buffer == null) {
Debug.Assert(_bufferCount == 0 && _bufferStart == 0);
_buffer = new byte[_defaultBufferSize];
} else if (_bufferStart + _bufferCount + count > _buffer.Length) {
// shift left:
Buffer.BlockCopy(_buffer, _bufferStart, _buffer, 0, _bufferCount);
_bufferStart = 0;
}
bytesRead = _stream.Read(_buffer, _bufferCount, count);
_bufferCount += bytesRead;
return bytesRead;
}