字节数组:如何确切地知道接收到的字节数

时间:2013-01-07 18:25:16

标签: java bytearray

我正在使用字节数组来存储从另一台计算机收到的数据包。

receivedData = new byte[1024];
receivedPacket = new DatagramPacket(receivedData, receivedData.length);
socket.receive(receivedPacket);
receivedData = receivedPacket.getData();
String res = new String(receivedData);  // PROBLEM HERE

问题出在最后一行:因为我将receivedData声明为长度为1024的字节流。所以,总是最后一行会从整个数组创建一个新字符串,尽管它并不确切知道有多少真实字符串我收到的字节。所以,我遇到了沮丧的错误:res没有按照我的意愿收到。 (因为我收到的实际字节长度没有修复整个数组)

所以,我的问题是:如何解决这一点,我怎么知道我真正收到多少字节转换为字符串?

3 个答案:

答案 0 :(得分:4)

尝试使用DatagramPacket.getLength()

receivedData = new byte[1024];
receivedPacket = new DatagramPacket(receivedData, receivedData.length);
socket.receive(receivedPacket);
receivedData = receivedPacket.getData();
String charsetName = "US-ASCII"; // set to desired charset
String res = new String(receivedData, 0, receivedPacket.getLength(), charsetName);

编辑添加字符集。谢谢,parsifal

答案 1 :(得分:2)

来自DatagramSocket.receive()的{​​{3}}:

  

数据报包对象的长度字段包含长度   收到的消息

然后,您可以使用带有字节数组和偏移量的构造函数构造String

答案 2 :(得分:2)

调用DatagramPacket.getLength()以查明实际接收的字节数。

当你从这些字节构造String时,一定要指定编码(因为它是,你使用的是JDK默认编码,它可能与服务器的不同)编码)。