我正在学习使用Java进行TCP和UDP套接字编程,我正在为我的网络类阅读的一本书有以下几行:
DatagramPacket receivedPacket = new DatagramPacket(receiveData, receiveData.length);
String modifiedSentence = new String(receivedPacket.getData());
其中receivedPacked只是一个DatagramPacket类型的Object,modifiedSentence存储从服务器返回的内容。在存储数据包之前,ReceivedPacket.getData()将数据包从字节转换为字符串。
我的问题是为什么要创建一个字符串的对象并将转换后的数据包存储/传递给它而不是使用以下内容:
String modifiedSentence = receivedPacket.getData();
这不起作用吗?我认为在Java中专门创建String类的对象是不切实际的。
答案 0 :(得分:2)
DatagramPacket.getData()
返回字节数组而不是字符串。因此,您需要将其转换为字符串以将其分配给字符串。
答案 1 :(得分:0)
String modifiedSentence = new String(receivedPacket.getData())
无论如何这都是错的。它应该是
String modifiedSentence = new String(receivedPacket.getData(), 0, receivedPacket.getLength())
我的问题是为什么要创建一个字符串的对象并将转换后的数据包存储/传递给它而不是使用以下内容:
String modifiedSentence = receivedPacket.getData();
因为它没有编译。 getData()
返回byte[]
,而不是String
。
我认为在Java中专门创建String类的对象是不切实际的。
仅当参数已经是String.
时才会出现这种情况。