我正在使用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()
来破坏字符串包,但它的长度会有所不同。
所以我在这个问题上需要一些帮助。
答案 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;
}