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 
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Java编程语言的八大优点
  • JVM对象生命周期详细介绍
  • Java平台上的CRM系统
  • Java 算数测试小程序
  • Command(命令模式)
  • Java环境 使用Resin在NT环境下配置JSP环境
  • Java 一个简单的画图程序
  • Java 日历的小程序
  • Java 统计代码的小工具
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1