想要将字节数组拆分为最大 1000 字节的块,并获取生成的块的数量:
byte[] buffer = File.ReadAllBytes("binarydata");
Run Code Online (Sandbox Code Playgroud)
buffer在本例中为 10100 字节,因此将有 11 个块,其中 10 个块每个 1000 字节,还有一个块 100 字节。
只是出于好奇,另一个版本。我确实认为有很多兴趣点。使用整数除法但向上舍入,例如 ( (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)