切断未使用的字节数据类型

时间:2012-06-25 12:45:37

标签: java string byte

我正在使用DatagramSocket和DatagramPacket在java中开发一个聊天应用程序。 接收的数据包是以字节为单位的。 但我不知道如何砍掉未使用的字节 这是代码: -

String s,pack[];

byte[] data=new byte[100];

data=dp.getData();//dp is instance of DatagramPacket

s=new String(data)

pack=s.split("-");//Username-ConnectionProtocol-IPaddress

在此代码中,最后一次拆分几乎以字节为单位获取ip地址和未使用的数据。 所以我需要一个解决方案来切断未使用的数据字节。 如127.0.0.1 [] [] [] [] [] [] [] [] [] .....

我试图使用subtstring()来破坏字符串包,但它的长度会有所不同。 所以我在这个问题上需要一些帮助。

2 个答案:

答案 0 :(得分:2)

  • 您不需要使用new byte[100]初始化数据,因为dp.getData()会丢弃您分配的100个字节。
  • 如果发送方写入的数据多于必要的数据,则无法知道应切断多少字节。发送方应该指出他发送了多少字节,或者你应该想出一个启发式方法,让你从有用的字节中告诉无用的字节。

例如,如果您知道未使用的字节始终位于数据包的末尾,并且它们始终设置为零,则可以使用此段代码来设置字符串:

data=dp.getData();
int pos = data.length-1;
while (pos != 0 && data[pos] == 0) {
    pos--;
}
s=new String(data, 0, pos);

答案 1 :(得分:1)

假设数据包的未使用部分归零,您可以使用这种代码:

static String[] parsePacket(byte[] p) {
  return new String(p, 0, len(p)).split("-");
}
static int len(byte[] p) {
  for (int i = 0; i < p.length; i++) if (p[i] == 0) return i;
  return p.length;
}