动态消息解析。

pujitan978 2019-08-07 10:15:15
一个消息的结构是下面这样,根据 字段"数据有无"能知道A0~A13是否存在这个消息中,这个消息长度不是固定的。
怎么能把这个消息内容解析到一个 对象(A0~A13个字段)中,而且如果追加Ax很容易修改.消息是个二进制流byte.

消息ID 2byte
时间 7byte
数据有无 8byte 每个bit表示一个para是否存在,这个消息是动态的,不是固定长. D0表示A0是否存在 D1表示A1是否存在
A0 2byte
A1 4byte
A2 8byte
A3 1byte
A4 2byte
A5 2byte
A6 2byte
A7 8byte
A8 2byte
A9 12byte
A10 2byte
A11 4byte
A12 8byte
A13 12byte
...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
baichangda234 2019-08-12
  • 打赏
  • 举报
回复
这个比较简单,先说下步骤 1、数据有无是8byte,即64位,你先把这个8字节转换为 64位的字符串'0101010...........' 2、然后循环字符串所有字符,每一个字符取出来判断是0还是1,然后进行你自己的逻辑处理 不过你这最多也只能到A63,不是无限的
maradona1984 2019-08-07
  • 打赏
  • 举报
回复
用spring就这么简单,新增类型就新增实现类即可

	public abstract class Router {
		@Autowired
		Map<String,Decoder> decoders;
		public void router(byte[] bytes) {
			String type = getType(bytes);//自己去实现,
			decoders.get(type).decode(bytes);
		}
		public abstract String getType(byte[] bytes);
	}
	public interface Decoder {
		void decode(byte[] bytes);
	}
	@Component("A0")
	public class A0Decoder implements Decoder{
		@Override
		public void decode(byte[] bytes) {
			//xxx
		}
	}
weixin_40290083 2019-08-07
  • 打赏
  • 举报
回复
不是很难,就是对字节和bit的处理,用C效率更高些

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧