Прослушивание по UDP-сокету - PullRequest
0 голосов
/ 22 июля 2010

Я использую этот код для получения данных из сокета 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 байта.

Есть ли лучший способ сделать это? Может быть, с каким-то циклом чтения while ()? Я еще не очень знаком с Java. :)

1 Ответ

1 голос
/ 22 июля 2010

Вы можете повторно использовать пакет, если хотите избежать накладных расходов при создании множественных массивов (хотя недолговечные объекты на самом деле очень мало влияют на производительность).

Обратите внимание, что вы не можете прочитать UDPдатаграмма в кусках, так как все, что находится за пределами конца DatagramPacket, который вы передаете receive , отбрасывается.

Edit - я проверил, и DatagramChannel.receive в значительной степенитак же.Вам действительно нужно убедиться, что ваш буфер достаточно велик для получения максимально возможной действительной дейтаграммы.

...