我正在使用此代码从UDP套接字接收数据并将其作为字符串返回:
byte[] receiveData = new byte[MAX_PACKET_SIZE];
DatagramPacket receivedPacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivedPacket);
return new String(receivedPacket.getData(), 0, receivedPacket.getLength());
我将MAX_PACKET_SIZE设置为1024,这使得Java每次数据包到达时都会保留1024位长字节[]。如果数据包远小于1024字节,这会导致 lot 的开销。
有没有更好的方法来实现这一目标?也许有某种while()读周期?我还不熟悉Java。 :)
答案 0 :(得分:1)
如果你想避免创建多个数组的开销,你可以重用数据包(尽管短期对象实际上对性能的影响非常小)。
请注意,您无法以块的形式读取UDP数据报,因为您传递给receive的DatagramPacket末尾之外的任何内容都将被丢弃。
编辑 - 我查了一下,DatagramChannel.receive几乎一样。您确实需要确保缓冲区足够大,以便能够接收尽可能大的有效数据报。