使用BlockCopy方法时,为什么要添加额外的4个字节

Mr *_*ubs 0 .net compression copy bytearray

搜索后,我没能找到一个很容易理解的解释,为什么额外的4个使用时对加BlockCopy方法(如图所示这里,这里,这里,这里)

文件说:

顾名思义,BlockCopy方法整体复制一个字节块,而不是一次复制一个字节.因此,如果src和dst引用相同的数组,并且srcOffset + count -1的范围与dstOffset + count - 1的范围重叠,则重叠字节的值在复制到目标之前不会被覆盖.在以下示例中,名为arr的数组中的字节0-16的值将复制到字节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);
Run Code Online (Sandbox Code Playgroud)

作为解压缩方法的一部分:

ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

它不是关于BlockCopy它自己 - 它是关于长度 - 为一些数据添加前缀,这就是全部.您已经发现了一些被广泛复制的代码而没有特别好的文档.

在阅读"消息"以了解该消息在您开始阅读之前有多长时间时,这通常很有用 - 这意味着您不需要分隔符,或者希望流的结尾意味着数据的结束.此代码仅压缩数据,然后在压缩数据之前写入压缩长度.