zoukankan      html  css  js  c++  java
  • 使用Joson的格式字符串在Socket中通讯时数据格式的转换

    最近在测试通讯模块时,发现新增的Android平台发送过来的数据,服务器端总是收不到,后来发现java中数据类型有些和C#中的不一样,比如C#中byte对应范围是0~255,而Java中则对应的是-128~127,因此直接按照通讯协议传序列化的二进制流总是出现问题。考虑到这一点在Android那一端才用Joson序列化发送到服务端,而在服务端对接收到的数据进行反序列化后转化为对象。同时在服务端进行发送数据时,转换为Joson格式后,序列化为二进制流发生给Android端。

    废话不多说了,上代码:

    //Joson格式的二进制流转换为对象

     public static T JosonDeSerializer<T>(byte[] buffer, int length)
            {
                try
                {
                    string mTextReceived = Encoding.UTF8.GetString(buffer, 0, length);

                    //将获取到的Joson格式字符串转换为数据包类
                    SocketDataPack sdp = GetSocketDataPackFromString(mTextReceived);
                    MemoryStream stream = new MemoryStream();
                    BinaryFormatter formatter = new BinaryFormatter();

                    //将数据包类序列化
                    formatter.Serialize(stream, sdp);
                    stream.Position = 0;
                    stream.Flush();

                    //转换为对象
                    object obj = formatter.Deserialize(stream);
                    if (obj == null)
                    {
                        return default(T);
                    }
                    return (T)obj;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            //对象转换为Joson格式二进制流
            public static byte[] JosonSerializer(object input)
            {
                try
                {
                    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                    string strSocketDataPack = jsonSerializer.Serialize(input);
                    byte[] buffer = Encoding.UTF8.GetBytes(strSocketDataPack);
                    return buffer;
                }
                catch (Exception ex)
                {
                    throw ex;
                }

            }
            /// <summary>
            /// 将Json格式的字符串转换为指定的数据包类
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            private static SocketDataPack GetSocketDataPackFromString(string context)
            {
                try
                {
                    SocketDataPack sdp = new SocketDataPack();
                    context = context.Replace("{", "").Replace("[", "").Replace("]", "").Replace("}", "").Replace("\"", "").Replace("\0","");
                    String[] str = context.Split(',');
                    for (int i = 0; i < str.Length; i++)
                    {
                        String[] str2 = str[i].Split(':');
                        switch (str2[0])
                        {
                            case "Length":
                                sdp.Length = Convert.ToInt16(str2[1]);
                                break;
                            case "Head":
                                sdp.Head = Convert.ToByte(str2[1]);
                                break;
                          //中间的数据包类的类型省略
                            。。。
                            case "Status":
                                sdp.Status = Convert.ToByte(str2[1]);
                                break;
                            case "Tail":
                                sdp.Tail = Convert.ToByte(Convert.ToInt16(str2[1]));
                                break;
                        }
                    }
                    return sdp;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

  • 相关阅读:
    SAP Tax Service可以取代TAXBRA / RVABRA吗?(翻译) 跨国贸易云税务解决方案
    SAP Brazil J1BTAX 为税收例外创建税收组(翻译)
    WordPress 安装插件导致 HTTP 500 内部服务器错误的问题
    12 Best Live Chat Software for Small Business Compared (2019) 最佳的wordpress在线聊天工具推荐插件 来帮你和潜在客户互动
    一个虚拟主机或空间实现放多个网站的方法【非常实用】
    用WordPress建立专业网站教程 (一步步建站, 一步也不少)
    阿里云+wordpress搭建个人博客网站【小白专用的图文教程】- 【转发】 AWS云和WordPress搭建个人博客网站
    【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)
    AI人工智能顶级实战工程师 课程大纲
    联想项目结束了,聊聊华为SAP HANA项目八卦
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2294468.html
Copyright © 2011-2022 走看看