C# 将 `int[]` 数组就地转换为 `byte[]` 数组

Edw*_*vey 2 .net c# arrays serialization casting

我有一个某种类型的数组(short[]int[]或类似的基本类型)。我想通过流发送它,所以我需要它是byte[]. 标准解决方案似乎是创建一个新byte[]数组,并使用BitConverter. 这种方法的问题是性能和内存使用 - 它需要分配所有新内存,复制到新内存中,然后将其写入byte[]流。

我非常想将数组的原始后备内存用作int[]数组byte[],这样我就可以就地发送它。为了这种非常明显且非常显着的性能差异,我愿意强制执行发送和接收系统必须具有相同字节序的要求。

有没有某种方法可以将数组int[]或类似数组视为byte[]就地数组?

Ole*_*ilo 5

如果您可以使用Span<T>(.net core 3+):

void Send(int[] data)
{
    ReadOnlySpan<byte> byteRef = MemoryMarshal.AsBytes(data.AsSpan());
    _stream.Write(byteRef);
}
Run Code Online (Sandbox Code Playgroud)