2010-07-22 166 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幾乎一樣。您確實需要確保您的緩衝區足夠大以接收最大可能的有效數據報。