日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用Joson的格式字符串在Socket中通讯时数据格式的转换

發(fā)布時(shí)間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Joson的格式字符串在Socket中通讯时数据格式的转换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在測(cè)試通訊模塊時(shí),發(fā)現(xiàn)新增的Android平臺(tái)發(fā)送過來(lái)的數(shù)據(jù),服務(wù)器端總是收不到,后來(lái)發(fā)現(xiàn)java中數(shù)據(jù)類型有些和C#中的不一樣,比如C#中byte對(duì)應(yīng)范圍是0~255,而Java中則對(duì)應(yīng)的是-128~127,因此直接按照通訊協(xié)議傳序列化的二進(jìn)制流總是出現(xiàn)問題??紤]到這一點(diǎn)在Android那一端才用Joson序列化發(fā)送到服務(wù)端,而在服務(wù)端對(duì)接收到的數(shù)據(jù)進(jìn)行反序列化后轉(zhuǎn)化為對(duì)象。同時(shí)在服務(wù)端進(jìn)行發(fā)送數(shù)據(jù)時(shí),轉(zhuǎn)換為Joson格式后,序列化為二進(jìn)制流發(fā)生給Android端。

廢話不多說了,上代碼:

//Joson格式的二進(jìn)制流轉(zhuǎn)換為對(duì)象

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

??????????????? //將獲取到的Joson格式字符串轉(zhuǎn)換為數(shù)據(jù)包類
??????????????? SocketDataPack sdp = GetSocketDataPackFromString(mTextReceived);
??????????????? MemoryStream stream = new MemoryStream();
??????????????? BinaryFormatter formatter = new BinaryFormatter();

??????????????? //將數(shù)據(jù)包類序列化
??????????????? formatter.Serialize(stream, sdp);
??????????????? stream.Position = 0;
??????????????? stream.Flush();

??????????????? //轉(zhuǎn)換為對(duì)象
??????????????? object obj = formatter.Deserialize(stream);
??????????????? if (obj == null)
??????????????? {
??????????????????? return default(T);
??????????????? }
??????????????? return (T)obj;
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? throw ex;
??????????? }
??????? }
??????? //對(duì)象轉(zhuǎn)換為Joson格式二進(jìn)制流
??????? 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格式的字符串轉(zhuǎn)換為指定的數(shù)據(jù)包類
??????? /// </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;
????????????????????? //中間的數(shù)據(jù)包類的類型省略
????????????????????? ? 。。。
??????????????????????? 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;
??????????? }
??????? }

轉(zhuǎn)載于:https://www.cnblogs.com/kevinGao/archive/2011/12/17/2294468.html

總結(jié)

以上是生活随笔為你收集整理的使用Joson的格式字符串在Socket中通讯时数据格式的转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。