在C#中将任意类型的实例写入MemoryStream
本文关键字:实例 MemoryStream 类型 任意 | 更新日期: 2023-09-27 18:27:32
在Delphi中,可以执行以下操作:
var
ms : TMemoryStream;
i : Integer;
begin
ms := TMemoryStream.Create;
i := 1024;
ms.Write(@i, SizeOf(Integer));
ms.Free;
end;
这将把i的内存内容写入ms。
.Net版本的MemoryStream没有这样的功能(无论是托管版本还是非托管版本)。在这方面,我知道.Net的工作原理与Delphi不同。
在C#中如何做到这一点?我对"最佳实践"和最快的方法感兴趣。
您可以将对象序列化为字节数组
// Convert an object to a byte array
private byte[] ObjectToByteArray(Object obj)
{
if(obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
return ms.ToArray();
}
// Convert a byte array to an Object
private Object ByteArrayToObject(byte[] arrBytes)
{
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(arrBytes, 0, arrBytes.Length);
memStream.Seek(0, SeekOrigin.Begin);
Object obj = (Object) binForm.Deserialize(memStream);
return obj;
}
然后使用MemoryStream
将其写入所需的
byte[] mData = ObjectToByteArray(myObject);
MemoryStream memStream = new MemoryStream();
memStream.write(mData, 0, mData.Length);
编辑:如果你想写一个整数,请使用
byte[] mData = BitConverter.GetBytes((UInt16)iInteger);
memStream.write(mData, 0, mData.Length);
尝试在MemoryStream之上使用BinaryWriter:
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
writer.Write((int)123);
注意:不要忘记在实际代码中处理流和编写器/读取器,即通过using
。
.NET流只处理byte
数据。
要写入任何其他类型的数据,您需要一个"终端":
- BinaryWriter,用于写入基元值(int、double、string)
- TextWriter使用Encoding编写字符和行
- 用于写入对象的序列化程序(多种选择)
所以在你的情况下:
var writer = new BinaryWriter(myStream);
writer.Write(i); // writes 4 bytes only