После поиска мне не удалось найти легко понятное объяснение, почему дополнительные 4 байта добавляются при использовании метода BlockCopy (как показано здесь , здесь, здесь , здесь )
Документация гласит:
Как следует из названия,метод BlockCopy копирует блок байтов целиком, а не копирует один байт за раз.Следовательно, если src и dst ссылаются на один и тот же массив, а диапазон от srcOffset + count -1 перекрывает диапазон от dstOffset + count - 1, значения перекрывающихся байтов не перезаписываются до их копирования в место назначения.В следующем примере значения байтов 0-16 в массиве с именем arr копируются в байты 12-28.Несмотря на перекрывающийся диапазон, значения исходных байтов успешно копируются.
Однако я не совсем понимаю это ясно и надеялся, что кто-то будет достаточно любезен, чтобы объяснить это по-другому (или опубликовать ссылкук ресурсу, который объясняет это), и почему существует требование добавить эти дополнительные 4 байта.
Для ясности приведем код, на который я ссылаюсь:
Какчасть метода сжатия:
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
Как часть метода сжатия:
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);