我有一个“巨大”的数据量,可能在50到100兆字节之间变化。 我使用filestreamer将这些数据作为字节数组读取。
问题是,我想将所有连续的2个字节转换为整数。 我这样做的方法是循环遍历字节数组,步长为2,然后使用BitConvert进行转换:
_data[i] = BitConverter.ToInt16(soundData[i : i + 2], 0) // Convert 2 bytes into an int and store at i
所以每两个字节变成一个Int16。 然而问题是,这太慢了,对于大约50兆字节的文件,这可能需要20秒!
是否有一种通用的方法可以立即执行此操作,而不是在我的数据数组的每2个字节上调用此函数,这样它就不会那么慢?最好以'安全'的方式,所以没有不安全的代码。
答案 0 :(得分:4)
如果字节数组在正确的Endian中,那么只需分配一个Int16数组并使用Buffer.Block copy(air code):
byte[] b = new byte[]{1, 2, 3, 4};
short[] s = new short[2]; // 4 bytes long
Buffer.BlockCopy(b, 0, s, 0, 4);
答案 1 :(得分:3)
没有测试,我不确定我的数学和“endianess”是否正确,但另一种选择是尝试这样的事情:
// Convert 2 bytes into an int and store at i
_data[j] = (int)soundData[i] + (soundData[i + 1] << 8);
如果这还不够快,那么您可能需要采用不同的方法解决问题。
可以找到问题的其他一些想法:Convert Byte Array to Integer In VB.Net