需要将UDP DatagramPacket中的字节数组/二进制消息转换为java中的几个字段

时间:2012-10-19 23:38:48

标签: java bytearray ascii datagram

我有一个由10字节消息组成的字节数组。我知道前2个字节包含一个想要提取到字符串的id。这个id的一个例子是:2001。其余的字节由我知道的其他字段组成。

我从UDP消息接收二进制数据,在尝试使用下面的方法转换二进制/字节数组后,我的打印仍然记录二进制消息。

我正在使用的代码如下转换二进制UDP消息:

 DatagramPacket rcvMsg = receivepacket.getData();
 String id = new String(rcvMsg, 0, 2, "US-ASCII");
 System.out.println("id ----- : "+id);

如何从二进制数据报消息中打印2001?

2 个答案:

答案 0 :(得分:3)

您想以什么格式恢复前2个字节?它们是代表整数,还是编码字符串?

因为,否则您可以将数组包装到ByteArrayInputStream中,然后将后者包装到DataInputStream中,然后使用DataInputStream方法在您认为合适时读取您的消息。

DataInput input = new DataInputStream(new ByteArrayInputStream(myArray));
String id = String.valueOf(input.readShort())

如果它们对应于支持的Java数据类型(即byte,short,int,String等),您甚至可以继续使用此对象来读取数组中编码的其余字段。

现在,如果您的前两个字节仅表示ASCII字符(或任何其他编码),那么您最好使用其中一个String构造函数:

String id = new String(myBytes, 0, 2, "US-ASCII");

答案 1 :(得分:2)

将字节数组转换为字符串,然后根据需要使用substring将其剪切掉。

这是一个类似的问题,c#中的代码(与java不太相似)应该有帮助: How to create a packet in C#

在此基于java示例进行了更新:Java Byte Array to String to Byte Array

byte[] bytes = new byte[] {97, 98, 99};
String str = new String(bytes);
System.out.println(str.substring(0,2));
System.out.println(str.substring(2));