2010-07-22 180 views
0

我使用这个代码从UDP套接字接收数据并返回它作为字符串:上侦听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位长的byte []数据包到达。如果数据包远小于1024字节,则会导致开销批次

有没有更好的方法来实现这个目标?也许有一些while()读周期?我还不是很熟悉Java。 :)

回答

1

如果您想避免创建多重数组的开销(尽管短期对象实际上对性能影响很小),您可以重用数据包。

请注意,您无法读取大块中的UDP数据报,因为超出数据报包结束的任何内容都将被丢弃,因此您将传递给receive

编辑 - 我检查了,和DatagramChannel.receive几乎一样。您确实需要确保您的缓冲区足够大以接收最大可能的有效数据报。