首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截取未使用的字节数据类型

截取未使用的字节数据类型
EN

Stack Overflow用户
提问于 2012-06-25 20:45:37
回答 2查看 558关注 0票数 1

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

代码语言:javascript
复制
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()来截取string Pack,但它的长度会有所不同。所以在这个问题上我需要一些帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-25 20:54:29

  • 您不需要使用new byte[100]初始化数据,因为dp.getData()会丢弃您分配的100个字节。
  • 如果发送方写入的数据超过必要的数量,则不可能知道应该截断多少字节。发送者应该指出他发送的字节数,或者您应该提出一个启发式方法,让您区分无用的字节和有用的字节。

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

代码语言:javascript
复制
data=dp.getData();
int pos = data.length-1;
while (pos != 0 && data[pos] == 0) {
    pos--;
}
s=new String(data, 0, pos);
票数 2
EN

Stack Overflow用户

发布于 2012-06-25 20:56:19

假设包中未使用的部分被清零,您可以使用这种代码:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11189648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档