我是C#中的新手,我希望在C#中发送一个Object。一直在使用BinaryWriter发送数据(对字符串工作正常),但它似乎没有像
这样的方法writer.Writer(new SerliaizedObject());
我们如何使用BinaryReader / BinaryWriter
实现这一目标更新 我使用以下函数将对象转换为byte并将其发送到客户端
public static byte[] SerializeToBytes<T>(T item)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, item);
stream.Seek(0, SeekOrigin.Begin);
return stream.ToArray();
}
}
public static object DeserializeFromBytes(byte[] bytes)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream(bytes))
{
return formatter.Deserialize(stream);
}
}
使用发送数据:
formatter = new BinaryFormatter();
MessageBox.Show(SerializeToBytes<mydata>(new mydata()).Length+"");
writer.Write(SerializeToBytes<mydata>(new mydata()));
ChatBox.AppendText("Client Says :" + UserMessage.Text + "\r\n");
并阅读我使用的数据:
while (true)
{
byte[] bytes = reader.ReadBytes(120);
mydata temp = DeserializeFromBytes(bytes) as mydata;
ChatBox.AppendText("Server Says " + temp + "\r\n");
}
但是读者似乎没有工作,任何想法?
答案 0 :(得分:2)
使用BinaryFormatter
以二进制格式将可序列化对象写入流:
FileStream fs = new FileStream("DataFile.dat", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, mySerializable);
答案 1 :(得分:0)
您应该使用前4个字节作为长度标头,并在接收循环中添加变量bytesReadSoFar。然后你知道什么时候收到了。