C# 将 `int[]` 数组就地转换为 `byte[]` 数组
C# in-place cast `int[]` array to `byte[]` array
我有一个某种类型的数组(short[]
、int[]
或类似的基本类型)。我想通过流发送它,所以我需要它是 byte[]
。标准解决方案似乎是创建一个新的 byte[]
数组,并使用 BitConverter
。这种方法的问题是性能和内存使用 - 它需要分配所有新内存,复制到新内存,然后将 byte[]
写入流。
我非常想将 int[]
数组的原始后备内存用作 byte[]
数组,这样我就可以就地发送它。为了这个非常明显和非常显着的性能差异,我愿意强制要求发送和接收系统必须是相同的字节序。
是否有某种方法可以将 int[]
或类似数组视为就地 byte[]
?
如果可以使用Span<T>
(.net core 3+):
void Send(int[] data)
{
ReadOnlySpan<byte> byteRef = MemoryMarshal.AsBytes(data.AsSpan());
_stream.Write(byteRef);
}
我有一个某种类型的数组(short[]
、int[]
或类似的基本类型)。我想通过流发送它,所以我需要它是 byte[]
。标准解决方案似乎是创建一个新的 byte[]
数组,并使用 BitConverter
。这种方法的问题是性能和内存使用 - 它需要分配所有新内存,复制到新内存,然后将 byte[]
写入流。
我非常想将 int[]
数组的原始后备内存用作 byte[]
数组,这样我就可以就地发送它。为了这个非常明显和非常显着的性能差异,我愿意强制要求发送和接收系统必须是相同的字节序。
是否有某种方法可以将 int[]
或类似数组视为就地 byte[]
?
如果可以使用Span<T>
(.net core 3+):
void Send(int[] data)
{
ReadOnlySpan<byte> byteRef = MemoryMarshal.AsBytes(data.AsSpan());
_stream.Write(byteRef);
}