首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >java中字节的数据包解析

java中字节的数据包解析
EN

Stack Overflow用户
提问于 2015-01-05 09:51:07
回答 3查看 1.5K关注 0票数 0

我遇到了一个问题,并试图在网上找到解决方案,但无法获得确切或类似的解决方案。我在套接字上获得数据包的问题(当然,将读取为byte[]),现在我想解析这个数据包。最初两个字节是整数(类型),接下来的两个字节又是整数(有效载荷长度),然后32字节的有效载荷数据和接下来的4个字节是CRC。这里的问题是我无法获得正确的方法来解析数据包,所以我获得了类型,有效负载长度。如果我知道将字节读取为正确格式的方法,我也可以读取有效负载数据。所以任何人都可以建议如何将byte[]读成正确的类型。提前谢谢。

有效载荷分组数据格式(部分)-

镜头类型

2B无符号短

2B无符号短

2B无符号短

2B无符号短

2B无符号短

4B带符号Long

4B带符号Long

4B带符号Long

4B带符号Long

EN

回答 3

Stack Overflow用户

发布于 2015-01-05 10:35:33

如果字节顺序是大端的,并且没有填充,那么可以使用DataInputStream的原语读取方法:readShort()表示类型;另一个readShort()表示长度;readFully()表示有效载荷;readInt()表示CRC。

票数 1
EN

Stack Overflow用户

发布于 2015-01-05 11:52:06

您可以使用类似于DataInputStream的ByteBuffer。它还允许指定字节顺序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// if you do not use NIO to read from socket, wrap a byte array:
ByteBuffer bb = ByteBuffer.wrap(bytes);
bb.order(ByteOrder.BIG_ENDIAN);
short short1 = bb.getShort();
short short2 = bb.getShort();
long long1 = bb.getLong();
票数 1
EN

Stack Overflow用户

发布于 2015-01-05 10:02:05

您可以使用DataInputStream。但是,您应该在使用时仔细检查每种方法。在java语言中,整数是4字节,短整型是2。所以当你说将2字节作为一个整数读取时,这个方法应该是readShort(),然后你可以把它转换成一个整数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
byte [] buffer = new byte[1024];
// populate your buffer

// you could also remove ByteArrayInputStream with the actual input stream.
DataInputStream in = new DataInputStream(new ByteArrayInputStream(buffer));
int theInteger = (int)in.readShort(); // reads 2 bytes from the stream and 
                                      // converts them to an integer
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27776961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文