c#中实现对象与byte[]间的转换.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#中实现对象与bytc|]fHj的转换 将对象转为bytc(] 通过海ket来发送信息的时候,它只接受byte[]类型的参数.怎么样把一个对汝转为 by(e[J,之后将它通过socket发送呢? 前段时间测试一个P2P程序,通过UDP来发送数据,UdpClicnt.Scnd(..)方法需要 个场倾]这样的参数“想当年用C++Builder的时候,只需要用强制转换就行了。如今时过境 迁,.nct平台上处理这事却似乎有些麻烦!今犬恰好在csdn h见一帖,乂看到了另一种处 理方法,七1现将我所知的3种方法总结一下。 一,通过序列化将对期转为bytc[],之后再反序化为对象 public class P2PHclpcr ( ///〈summary〉 ///将一个object对象序列化,返回一个byte( J III /summary /// pararn narne=,obj能序列化的对^./parain /// returnjox/reiurns public sialic byteQ ObjcclToByies(objcct obj) { using (Mcmor)rStrcam ms = new McmorjStrcamt)) { I Formatter formatter = new BinaiyFonnatter(): fiKfnatter.Serialize(im, obj); return ms.GelBuffer(); /// suminary ///将一个序列化后的by叫数组还原 /// /summary /// param namc=,,Bytes,,/parani /// returnsx/rctuins public sialic object Bytesl oObjecKbyte(] Bytes) ( using (MemoryStream ms = new MemoryStream(Byies)) { I Formatter formatter = new BinaryFormatlcrO; return formatter.Dcscrializc(ms); ) 这种方法通过序列化来处理心,虽然简单,然后每一个对象序列化后都至少有 256字节.会导致网络流房的增大。Ml.如果一?个对象只有10个字节,然而发送的时候却 有256字节 恐怖(注:多谢双伯座的指iE) 二、 使用BitConvcrt类来处埋 很麻烦的一种方法,我这等懒人是不敢用这种方法的了。不过这篇文章 blogs.coni/archivc/2005/06/21 /178343.aspx 上村些讲解,想了解的朋友口J以去 看看, 三、 使用Unsafe方式 先看代码(尚不如是否彳了 memory leak!!!): class Test ( public static unsafe bytc(] Stnict2Bytcs(Object obj) { int size = Marshal.SizeOf(obj); byte|] bytes = new byie[size]; fixed(byte* ph = bytes[O|) Marshal.Stiiic(ureToPtr(obj.new IntPtr(pb).tnie); return bytes; public static unsafe Object Bytcs2Stmct(bytc|| bytes) fixed(byte* pb = bytes[0|) return Marshal.PirToStmciure(new In(Pir(pb), type。Data)); } ) 这种方法的确不错.即不增加网络流虽.处理起来也简单。只是.似乎它只能处理 Struct,对 J ? Class 就有麻烦了?

文档评论(0)

scj1122111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8113057136000004

1亿VIP精品文档

相关文档