Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9086753
  • 博文数量: 1732
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19830
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1732)

文章存档

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2022-09-30 09:48:13


点击(此处)折叠或打开

  1. 在网络传输时,我们接收到的数据都是10的形式,八个01(big)构成了一个byte字节,一个或多个byte又构成了不同的数据类型,接收到这些byte数组后,我们就需要对数组进行反序列化为java中的对象。而通过javolution.io.Struct就可以很容易的实现反序列化(序列化)
  2. 首先,我们要按照数据顺序定义结构体(java的class文件):该类型必须继承Struct,byte数组中,不同的类型按照byte数,一一对应
  3. 如char在传输中占用8bit,所以我们就用Unsigned8 (无符号8bit)来接收,int在占位32位,于是我们用Unsigned32来接收,char[]我们通过UTF8String 来接收。这样我们就定义好了如果接收一个byte数组序列了,可以通过以下两个函数指定大小端。
  4. ————————————————————————————————

  5. public class BaseDataDef extends Struct{
  6.     Unsigned8 unsigned8=new Unsigned8();
  7.     Unsigned16 unsigned16=new Unsigned16();
  8.     Unsigned32 Unsigned32=new Unsigned32();
  9.     Signed8 signed8 =new Signed8();
  10.     Signed16 Signed16 =new Signed16();
  11.     Signed32 Signed32 =new Signed32();
  12.     Signed64 Signed64 =new Signed64();
  13.     UTF8String utf8String=new UTF8String(10);
  14.     // 一定要加上这个,不然会出现对齐的问题
  15.     @Override
  16.     public boolean isPacked() {
  17.         return true;
  18.     }

  19.     // 设置为小端数据
  20.     @Override
  21.     public ByteOrder byteOrder() {
  22.         return ByteOrder.LITTLE_ENDIAN;
  23.     }
  24. }
  25. ————————————————————————————————————————————————————————————————
  26. 然后我们可以将byte数据填入到这个类中

  27.     @Test
  28.     public void setUp() throws Exception {
  29.         //这里模拟了一下数据的输入
  30.         byte[] data = new byte[221];
  31.         for (int i = 0; i < data.length; i++) {
  32.             data[i] = (byte) i;
  33.         }
  34.         ByteBuffer b = ByteBuffer.wrap(data);
  35.         //小端
  36.         b.order(ByteOrder.LITTLE_ENDIAN);
  37.         BaseDataDef info=new BaseDataDef ();
  38.         //设置byte数组
  39.         info.setByteBuffer(b, 0);
  40.         //打印输出,这里输出byte字符串
  41.         System.out.println(info);
  42.         //如果想打印某一个项,直接
  43.         System.out.println(info.unsigned16);

  44.         System.out.println("#########################");
  45.     }

阅读(504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~