考虑以下方法(在工厂方法使用):如何编组托管代码中的子集byte []数组?
private Packet(byte[] rawBytes, int startIndex)
{
m_packetId = BitConverter.ToUInt32(rawBytes, startIndex);
m_dataLength = BitConverter.ToUInt16(rawBytes, startIndex + 4);
if (this.Type != PacketType.Data)
return;
m_bytes = new byte[m_dataLength];
rawBytes.CopyTo(m_bytes, startIndex + Packet.HeaderSize);
}
代码的最后两行打我浪费。分配更多的内存并用内存中的值填充它看起来很愚蠢。
与非托管代码,这样的事情是可能的:
m_bytes = (rawBytes + (startIndex + Packet.HeaderSize));
(我没有通过编译器,语法可能是关闭运行它,但你可以看到它只是指针操作的问题。)
有一天,当一个API返回一个真的是short []数组的byte []数组时,我遇到了类似的问题。
这些类型的数组排列只是使用托管代码的成本,还是存在一个我刚刚失踪的新思维流派?
在此先感谢。