C#,是否可以将字节*转换为字节[]而无需复制?最快的方法是什么?

我从套接字连接中有一个大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结构可以帮助您将偏移量与数组一起传递.

上一篇:讨论Java中字符串的不变性


下一篇:java并发之AtomicInteger源码分析