字节[]到字符串的转换,在Java中进行适当的截断

字节[]到字符串的转换,在Java中进行适当的截断,java,string,truncate,Java,String,Truncate,我有一个大小为200的字节数组,该数组使用socket.receive()接收数据。假设包数据是“hello” 我尝试将字节数组转换为字符串,字符串长度为200,即使它只打印“hello”字符串 String result = new String(byte1); // .toString(); System.out.println(result.length()); --> 200 System.out.println(result); ---> hello 从字节[]转换字符串

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

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

String result = new String(byte1); // .toString();
System.out.println(result.length()); --> 200
System.out.println(result); ---> hello
从字节[]转换字符串时,如何将其截断为仅包含“hello”

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

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

如果额外的位都是空的/空白,trim()应该可以做到这一点。

也许你应该在收到数据后检查它的长度:


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

如果多余的比特都是空的/空白,trim()应该可以。这里有些可疑。作为客户,您如何知道何时收到了整个字符串?也就是说,你有什么方法知道你已经得到了所有的字符数据?这是单元测试代码的一部分,所以我确切地知道我发送的字符串。@Thomas:它起作用了。请回答,以便我接受它。“setLength()”方法用于发送,而不是接收。如果数据报中的消息应该包含前导和/或尾随空格,则这实际上是不正确的。请考虑下面的答案(链接到文档)
int packetLength = packet.getLength();
byte[] byte1 = packet.getData();
String result = new String(byte1);
return result.substring(0, packetLength);