在Delphi中,可以执行以下操作:
var
ms : TMemoryStream;
i : Integer;
begin
ms := TMemoryStream.Create;
i := 1024;
ms.Write(@i, SizeOf(Integer));
ms.Free;
end;
这会将i的内存内容写入ms。
MemoryStream的.Net版本没有这样的功能(托管版本和非托管版本)。我知道.Net在这方面与Delphi的原理不同。
如何在C#中执行此操作?我对“最佳实践”和最快的方法感兴趣。
答案 0 :(得分:7)
您可以将对象序列化为字节数组
// 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);
答案 1 :(得分:4)
尝试在MemoryStream之上使用BinaryWriter:
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
writer.Write((int)123);
注意:不要忘记在实际代码中处理流和编写器/阅读器,即using
。
答案 2 :(得分:2)
.NET流只处理byte
数据。
要编写任何其他类型的数据,您需要一个“终端”:
所以在你的情况下:
var writer = new BinaryWriter(myStream);
writer.Write(i); // writes 4 bytes only