private void WriteBytes(byte[] bytes, int bytesCount, Stream dataOut, ref long dataOutWritten) {
var remainingSpace = dataOut.Length - dataOutWritten;
var maxWrite = Math.Min(bytesCount, remainingSpace);
if (maxWrite > 0) {
dataOut.Write(bytes, 0, (int)maxWrite);
dataOutWritten += maxWrite;
}
if (maxWrite < bytesCount) {
var range = new byte[bytesCount - maxWrite];
Array.Copy(bytes, maxWrite, range, 0, range.LongLength);
_overflow.AddRange(range);
}
}