【发布时间】:2026-01-15 16:55:02
【问题描述】:
我正在一些结构和它们的byte[] 表示之间进行一些转换。我找到了两种方法来做到这一点,但区别(性能、内存和......)对我来说并不清楚。
方法一:
public static T ByteArrayToStructure<T>(byte[] buffer)
{
int length = buffer.Length;
IntPtr i = Marshal.AllocHGlobal(length);
Marshal.Copy(buffer, 0, i, length);
T result = (T)Marshal.PtrToStructure(i, typeof(T));
Marshal.FreeHGlobal(i);
return result;
}
方法二:
public static T Deserialize<T>(byte[] buffer)
{
BinaryFormatter formatter = new BinaryFormatter();
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer))
{
return (T)formatter.Deserialize(stream);
}
}
那么哪个更好,主要区别是什么?
【问题讨论】:
-
对它们都运行分析器。
-
二进制格式化程序是否也不会将类型数据序列化到流中?
-
就我而言,确实如此。所以如果他们没有区别,每个人都应该使用第二种方法,没有人使用第一种方法。
标签: c# marshalling binaryformatter binary-serialization