按段执行字节数组操作

时间:2014-01-24 01:35:00

标签: c# c#-3.0 bytearray

当您需要从该数组逐段工作时,在字节数组上实现某些操作工作的最佳和最简单的方法是什么。例如,段大小为4096字节,您需要执行任何操作,但使用4096字节的段。返回值应该再次是字节数组,我正在寻找一些方法,以避免在可能的情况下很多复制到新数组。此外,它必须适用于.net 3.0

1 个答案:

答案 0 :(得分:1)

也许是这些方面的东西?你的问题非常通用......

const int SEGMENT_SIZE = 4096;
int segment, i;

f(byte[] data, int offset, int length)
{
  byte[] output = new byte[length];

  // TODO: implement

  return output;
}

segment = 0;
while(segment * SEGMENT_SIZE < buffer.Length)
{
    output = f(buffer, segment * SEGMENT_SIZE, SEGMENT_SIZE);
    segment++;
}

不带分段的输出:

g(byte[] src, byte[] dst, int srcOffset, int dstOffset, int length)
{
  // TODO: implement process from src[srcOffset + i] to dst[dstOffset + i]

  // no return, has side-effect on dst
}


outputBuffer = new byte[inputBuffer.Length];
segment = 0;
while(segment * SEGMENT_SIZE < inputBuffer.Length)
{
    g(inputBuffer, outputBuffer, segment * SEGMENT_SIZE, segment * SEGMENT_SIZE, SEGMENT_SIZE);
    segment++;
}

AES加密可以保持块的大小,因此数据将逐块对齐。注意填充,最后一段可能是部分的。使用正确的填充,由于填充不良,我很难让它工作。还要确保你有4096个字节的块... IIRC你应该使用2个256字节的块。无论哪种方式,你都必须大量改变价值观!祝你好运:)