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

时间:2011-09-21 09:16:14

标签: .net copy bytearray compression

搜索之后,我没有找到一个易于理解的解释,说明为什么在使用BlockCopy方法时添加了额外的4个字节(如图所示herehere,{{ 3}},here

here说:

  

顾名思义,BlockCopy方法将字节块复制为   一个整体,而不是一次复制一个字节。因此,如果src和   dst引用相同的数组,范围从srcOffset + count -1   重叠范围从dstOffset + count - 1,其值   重叠字节在复制到之前不会被覆盖   目的地。在以下示例中,字节0-16的值为   名为arr的数组被复制到字节12-28。尽管有重叠   范围,源字节的值被成功复制。

然而,我并没有真正理解这一点,并希望有人能够以不同的方式解释它(或发布一个解释这个的资源的链接),以及为什么需要添加这些额外的4个字节。< / p>

为清楚起见,这里是我所指的代码:

作为压缩方法的一部分:

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);

1 个答案:

答案 0 :(得分:5)

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

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