111,097
社区成员




private byte[] RemoveBytes(byte[] _originalBytes)
{
byte[] resBytes = new byte[0];
int nums = _originalBytes.Length / 4096;
for (int i = 0; i < nums ; i++)
{
resBytes = resBytes.Concat(_originalBytes.Skip(4096 * i + 24).Take(4072).ToArray()).ToArray();
}
resBytes = resBytes.Concat(_originalBytes.Skip(24 + nums * 4096).ToArray()).ToArray();
return resBytes;
}
private byte[] RemoveBytes(byte[] _originalBytes)
{
const int length = 4072;
const int block = 4096;
var offset = 24;
var nums = _originalBytes.Length / block;
using (MemoryStream ms = new MemoryStream())
{
for (var i = 0; i < nums; i++)
{
ms.Write(_originalBytes, offset, length);
offset += block;
}
return ms.ToArray();
}
}
另外可以考虑并发分段处理,最后合并结果, Map then reduce. var a = new byte[40434768];
int len = a.Length / 4096;
var b = new byte[(len+1) * 4072];
for (int i = 24, j = 0; i < a.Length; i += 4096, j += 4072)
{
Array.Copy(a, i, b, j, 4072);
}
可能会有 源数组长度不足 的异常,记得判断处理一下