gpt4 book ai didi

java - 以字节为单位的字符串无法转换为等效的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:47 25 4
gpt4 key购买 nike

public class MyClass{
static final String BROADCAST = "Broadcasting";
public static final int PORT = 12344;
public static String host = "localhost";
public static void main(String[] args) {
// TODO Auto-generated method stub
DatagramSocket serverSocket;
try {
serverSocket = new DatagramSocket(PORT);
InetAddress addr = InetAddress.getByName(host);

byte[] sendData = BROADCAST.getBytes();

DatagramPacket sendPacket = new DatagramPacket(
sendData, //data byte array
sendData.length, //number of bytes
addr, //destination host address
PORT); //destination port
serverSocket.send(sendPacket);
byte[] rcvData = new byte[1024];

DatagramPacket rcvPacket = new DatagramPacket(
rcvData, rcvData.length);

//packet gets filled in by receive
serverSocket.receive(rcvPacket);

//Why the two Strings are not the same?
//Why the bytes derived from the same string different?
byte[] a = rcvData;
byte[] b= BROADCAST.getBytes();
System.out.println(a.equals(b));
System.out.println(new String(a));
System.out.println(new String(b));
System.out.println((new String(a).equals(new String(b))));


} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

我注意到

1)我使用getByte()方法得到的字节数组是不同的。

2) 尽管a和b的字符串(从代码来看)完全相同,但它们并不相等。

这是我从四个 print 语句得到的输出:

false

Broadcasting

Broadcasting

false

最佳答案

您的接收代码不正确,因为传入数据包的大小并不总是与您的接收缓冲区的大小相同。所以你在将数据转换为String时需要限制数据的长度,否则,你也会转换垃圾。

byte[] a = rcvData;
byte[] b = BROADCAST.getBytes();
String recStr = new String(rcvData, 0, rcvPacket.getLength());
System.out.println(recStr.equals(new String(b)));

那么您实际上是在准确比较发送和接收的数据包内容。

关于java - 以字节为单位的字符串无法转换为等效的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com