【问题标题】:byte[] to String conversion with proper truncation in Java字节[]到Java中适当截断的字符串转换
【发布时间】:2013-04-23 02:30:15
【问题描述】:

我有一个大小为 200 的字节数组,其中包含使用socket.receive() 接收的数据。假设数据包数据是“hello”。

int size = 200;
DatagramPacket packet = new DatagramPacket(new byte[size], size);
socket.receive(packet);
byte[] byte1 = packet.getData();

我尝试将字节数组转换为字符串,字符串长度为 200,即使它只打印出 'hello' 字符串。

String result = new String(byte1); // .toString();
System.out.println(result.length()); --> 200
System.out.println(result); ---> hello

从 byte[] 转换字符串时,如何截断字符串以仅包含“hello”?

添加

根据 malchow 的回答,这解决了我的问题:

int packetLength = packet.getLength();
byte[] byte1 = packet.getData();
String result = new String(byte1);
return result.substring(0, packetLength);

【问题讨论】:

  • 如果多余的部分都是空的/空白,trim() 应该这样做。
  • 这里有问题。作为客户,您如何知道您何时收到了整个字符串?那就是 - 你有什么方法知道你已经获得了所有的角色数据?
  • 这是单元测试代码的一部分,所以我确切知道我发送的字符串。
  • @Thomas:有效。请回答以便我接受。

标签: java string truncate


【解决方案1】:

也许您应该在收到数据后尝试检查收到的数据的长度:

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/DatagramPacket.html#getLength%28%29

这应该是 4(在调用 socket.receive() 之后)

【讨论】:

  • “setLength()”方法是用来发送的,不是用来接收的。
【解决方案2】:

如果多余的部分都是空的/空白,trim() 应该这样做。

【讨论】:

  • 如果数据报中的消息应该包含前导和/或尾随空格,这实际上是不正确的。请在下面考虑我的回答(带有文档链接)
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多