public override void Write(byte[] buffer, int offset, int count)
{
if (count > MAX_CHUNK_SIZE)
{
Write(buffer, offset, MAX_CHUNK_SIZE);
Write(buffer, offset + MAX_CHUNK_SIZE, count - MAX_CHUNK_SIZE);
return;
}
while ((count != 0) && (_positionChunk != _chunks.Count))
{
int toChunk = Math.Min(count, _chunks[_positionChunk].Length - _positionOffset);
if (toChunk != 0)
{
Array.Copy(buffer, offset, _chunks[_positionChunk], _positionOffset, toChunk);
offset += toChunk;
count -= toChunk;
_position += toChunk;
}
_positionOffset = 0;
_positionChunk++;
}
if (count != 0)
{
var chunk = new byte[count];
Array.Copy(buffer, offset, chunk, 0, count);
_chunks.Add(chunk);
_positionChunk = _chunks.Count;
_position += count;
}
}
}