当您需要从该数组逐段工作时,在字节数组上实现某些操作工作的最佳和最简单的方法是什么。例如,段大小为4096字节,您需要执行任何操作,但使用4096字节的段。返回值应该再次是字节数组,我正在寻找一些方法,以避免在可能的情况下很多复制到新数组。此外,它必须适用于.net 3.0
答案 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字节的块。无论哪种方式,你都必须大量改变价值观!祝你好运:)