Java 如何读取和查找数据包的长度(以字节为单位)
如何使用DataInputStream及其readUnsignedShort/readUnsignedByte方法查找数据包的长度 数据包的头是7个字节,如下所示: TT SS VV 其中: TT型 SS是尺寸 VV是版本 我需要找到数据包的大小,然后打印它的十六进制二进制文件,直到在报头中找到的给定字节 我需要使用DataInputStream函数来实现这一点,但如何实现 谢谢大家! 如果这些是字节:Java 如何读取和查找数据包的长度(以字节为单位),java,sockets,proxy,packet,Java,Sockets,Proxy,Packet,如何使用DataInputStream及其readUnsignedShort/readUnsignedByte方法查找数据包的长度 数据包的头是7个字节,如下所示: TT SS VV 其中: TT型 SS是尺寸 VV是版本 我需要找到数据包的大小,然后打印它的十六进制二进制文件,直到在报头中找到的给定字节 我需要使用DataInputStream函数来实现这一点,但如何实现 谢谢大家! 如果这些是字节: 使用readUnsignedShort() 将3字节长度字段和版本字段与readInt()
- 使用
readUnsignedShort()
- 将3字节长度字段和版本字段与
一起读取,并分别用移位和掩码将它们分开readInt()
int type = stream.readUnsignedShort();
int size = stream.readUnsignedShort();
size <<= 8;
size |= stream.readUnsignedByte();
int version = stream.readUnsignedByte();
int type=stream.readUnsignedShort();
int size=stream.readUnsignedShort();
大小如何读取它们,然后移动它们?有没有更快捷的方法来确定尺寸?分别用移位和蒙版。右移8以获得长度;使用0xff屏蔽以获取版本。有什么问题吗?为什么你认为你需要一个更快的方法呢?嗯,我不明白这意味着什么,也不知道怎么做:你有没有一个例子?我会做一些类似的事情吗:stuff=socket.readUnsignedInt()
?你不明白“向右移位”或“掩码”的哪一部分?这是非常基本的。所有这些。。我可能可以用谷歌搜索如何做到这一点,但首先我该如何得到这些东西?谢谢-我回家后会测试它。我认为它不起作用,因为我得到的东西非常大。。。1283112您是否遗漏了掩蔽0xff?不。它更可能是endian问题。尝试交换最终整数中字节的顺序。我发现奇怪的是,数据以一个3字节的数字开始(假设这个数字是以字节编码的——你还没有对此发表评论)。是的,它是以字节的形式。让类型和尺寸正常工作。但版本显示为0:您可以忽略完整数据和大小为0的事实。现在可以了,但版本仍然是0。
int type = stream.readUnsignedShort();
int size = stream.readUnsignedByte();
size <<= 8;
size |= stream.readUnsignedByte();
size <<= 8;
size |= stream.readUnsignedByte();
int version = stream.readUnsignedByte();