ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用java解码二进制消息

2019-08-26 09:01:28  阅读:301  来源: 互联网

标签:decoding java binary


我需要解码以高速率(> 1000 msgs / sec)发送的二进制消息,并使用JAVA将它们存储在DB(未决定哪一个)中.将有多个TCP连接进入此服务器,每个连接都有自己的二进制数据流,需要进行处理.

消息不会被任何“标志”分隔开.
消息的开头有一个4字节长的字段.它后面是一个固定的标题.
消息的有效载荷将依次是多个消息,每个消息具有固定的头部,然后是位掩码(32位),其确定存在哪些其他字段.每个位掩码字段是32位,位32-30(MSB-32 / Big endian)指定每个可选字段的长度.所有其他位(29-1),如果“ON”则表示该字段存在于消息中.

例如,如果位32-30是100,并且位1是“1”,则字段XXX跟随位掩码字段并且它是4字节长.如果位2为“0”,则消息中不存在字段YYY,依此类推.
存在多个位掩码字段(可选)但受最大数量限制.
我是java(c / C背景)的新手,所以问题可能……

1)我正在考虑以常规方式设计应用程序“主”线程接收连接并创建“工作线程A”来处理该套接字上的消息.我正在考虑让配置文件驱动“workerThread A”是否创建了一个用于处理每条消息的threadPool,或者是自己做的.我将实现前者并检查性能,看看是否需要改进.
我的问题是,netty还是Apache Mina的好选择?由于它是POC的努力,我需要快速启动它.
2)我想过使用nio – SocketChannel和ByteBuffer.但似乎我无法从套接字读取指定数量的字节?我认为“readInt()”更容易获得长度然后从套接字读取“长度”字节数以获得完整的一条消息然后解析它. DataInputStream是否更好用?使用oio vs nio会对性能产生什么影响?
3)我应该查看任何框架来解码消息吗?我稍微查看了Google协议缓冲区,但它似乎不支持解码位掩码字段.

解决方法:

我会为每个连接创建一个工作线程.

我会使用DataInputStream,除非你确定这不够快.性能影响很小,但不太可能达到1000 msg / sec.

我会在使用JDK到达时解码消息.我没有找到第三方库来使这种情况更简单.

标签:decoding,java,binary
来源: https://codeday.me/bug/20190826/1728525.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有