我从套接字连接中有一个大byte [] receiveBuffer,其中包含多个数据包.
我想将单个数据包传递到应用程序的下一层,但是我不想将每个数据包复制到一个新的数组中.
我目前正在做这样的事情
fixed (byte* rxBufferPtr = receiveBuffer)
{
while(more_packets_in_rx_buf)
{
NewPacketReceived(rxBufferPtr + offset, packetSize);
// NewPacketReceived params: NewPacketReceived(byte* packet, int size)
offset += packetSize;
}
}
我想传递一个托管数组而不是指针和大小,新的NewPacketReceived参数将是:NewPacketReceived(byte [] packet)
我从不重复使用接收缓冲区,它会在满后创建一个新缓冲区.
解决方法:
不,您不能没有复制.通过偏移量或长度是路要走.您不必不安全,它并不总是更快. ArraySegment
结构可以帮助您将偏移量与数组一起传递.