C# 将字节数组分割成单独的块并获取块的数量

Tim*_*son -1 c# byte

想要将字节数组拆分为最大 1000 字节的块,并获取生成的块的数量:

byte[] buffer = File.ReadAllBytes("binarydata");
Run Code Online (Sandbox Code Playgroud)

buffer在本例中为 10100 字节,因此将有 11 个块,其中 10 个块每个 1000 字节,还有一个块 100 字节。

xan*_*tos 5

只是出于好奇,另一个版本。我确实认为有很多兴趣点。使用整数除法但向上舍入,例如 ( (buffer.Length + blockSize - 1) / blockSize),或在循环中使用第二个索引器for( j),这样我们就不必进行乘法。并且使用Buffer.BlockCopy, 通常比“手动”复制数组(使用第二个for周期)更快

public static byte[][] BufferSplit(byte[] buffer, int blockSize)
{
    byte[][] blocks = new byte[(buffer.Length + blockSize - 1) / blockSize][];

    for (int i = 0, j = 0; i < blocks.Length; i++, j += blockSize)
    {
        blocks[i] = new byte[Math.Min(blockSize, buffer.Length - j)];
        Array.Copy(buffer, j, blocks[i], 0, blocks[i].Length);
    }

    return blocks;
}
Run Code Online (Sandbox Code Playgroud)