UDP套接字编程(提取数据,将其存储在字符串中)
Posted
技术标签:
【中文标题】UDP套接字编程(提取数据,将其存储在字符串中)【英文标题】:UDP socket programming(extracting the data, storing it in a string) 【发布时间】:2013-02-04 18:48:37 【问题描述】:我正在学习使用 Java 进行 TCP 和 UDP 套接字编程,我正在为我的网络课程阅读的其中一本书有以下内容:
DatagramPacket receivedPacket = new DatagramPacket(receiveData, receiveData.length);
String modifiedSentence = new String(receivedPacket.getData());
receivedPacked 只是一个 DatagramPacket 类型的对象,modifiedSentence 存储从服务器返回的内容。在这种情况下,ReceivedPacket.getData() 在存储之前将数据包从字节转换为字符串。
我的问题是为什么要创建一个字符串对象并将转换后的数据包存储/传递给它,而不是使用以下内容:
String modifiedSentence = receivedPacket.getData();
这不行吗?我认为在 Java 中专门创建 String 类的对象是不切实际的。
【问题讨论】:
【参考方案1】:DatagramPacket.getData()
返回一个字节数组而不是字符串。因此,您需要将其转换为字符串以将其分配给字符串。
【讨论】:
哦,我明白了,我认为出于某种原因 .getData() 方法的工作还涉及将字节转换为字符串。会做 String modifiedSentence = (String)(receivedPacket.getData());工作?我可以将收到的字节类型转换为这样的字符串类型吗?还是需要专门用“new”关键字创建对象。 不,你不能投射它。您需要使用 new String()【参考方案2】: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.
在这种情况下它不是。
【讨论】:
以上是关于UDP套接字编程(提取数据,将其存储在字符串中)的主要内容,如果未能解决你的问题,请参考以下文章