public void LoadFrom(Stream stream, int count)
{
ThrowIfDisposed();
EnsureIsWritable();
if (stream == null)
{
throw new ArgumentNullException("stream");
}
EnsureSpaceAvailable(count);
var position = _position; // don't advance position
while (count > 0)
{
var chunkIndex = (_sliceOffset + position) / _chunkSize;
var chunkOffset = (_sliceOffset + position) % _chunkSize;
var chunkRemaining = _chunkSize - chunkOffset;
var bytesToRead = (count <= chunkRemaining) ? count : chunkRemaining;
var bytesRead = stream.Read(_chunks[chunkIndex].Bytes, chunkOffset, bytesToRead);
if (bytesRead == 0)
{
throw new EndOfStreamException();
}
position += bytesRead;
count -= bytesRead;
}
if (_length < position)
{
_length = position;
}
}