socket中将对象转化为字节发送(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:09 点击:次
return formatter.Deserialize(ms);
}
}
}
这种方法通过序列化来处理对象,虽然简单,然后每一个对象序列化后都至少有256字节, 会导致网络流量的增大。想想,如果一个对象只有10个字节,然而发送的时候却有256字节~~~~~~恐怖(注:多谢 双鱼座 的指正)
二、使用BitConvert类来处理
很麻烦的一种方法,我这等懒人是不敢用这种方法的了。不过这篇文章http://pierce.cnblogs.com/archive/2005/06/21/178343.aspx 上有些讲解,想了解的朋友可以去看看。
三、使用Unsafe方式
先看代码(尚不知是否有memory leak!!!):
class Test
{
public static unsafe byte[] Struct2Bytes(Object obj)
{
int size = Marshal.SizeOf(obj);
byte[] bytes = new byte[size];
fixed(byte* pb = &bytes[0])
{
Marshal.StructureToPtr(obj,new IntPtr(pb),true);
}
return bytes;
}
public static unsafe Object Bytes2Struct(byte[] bytes)
{
fixed(byte* pb = &bytes[0])
{
return Marshal.PtrToStructure(new IntPtr(pb), typeof(Data));
}
}
}
这种方法的确不错,即不增加网络流量,处理起来也简单。只是,似乎它只能处理Struct, 对于Class就有麻烦了。(注:请查看 sunmast 的评论)
倘若还有其它方法,请告之,:)
posted on 2005-07-23 20:58 楚潇 阅读(1190) 评论(12) 编辑 收藏 收藏至365Key 所属分类: .net技术
评论:
# re: 将对象转为byte[] 2005-07-23 21:16 | 浮云
我用的第二种方法。虽然麻烦点,不过最灵活。
# re: 将对象转为byte[] 2005-07-23 22:19 | 萧寒
我原来做过工控的程序,通讯要转化double/string/int 的为byte进行通讯;实现和你的方法三一样,采用指针;这里可以看到原文;http://chinasf.cnblogs.com/archive/2005/05/28/163932.html
相关新闻>>
- 发表评论
-
- 最新评论 更多>>