Я работаю над приложением Android (очевидно, на Java) и недавно обновил свой код для чтения UDP. В обеих версиях я настроил несколько буферов и получил пакет UDP:
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
В первоначальной версии я собирал данные обратно по одному байту за раз (на самом деле это 16 аудиоданных PCM):
for (int i = 0; i < count; i++)
soundData[i] = (short) (((buf[k++]&0xff) << 8) + (buf[k++]&0xff));
В обновленной версии я использовал несколько классных инструментов Java, о которых я не знал, когда начинал:
bBuffer = ByteBuffer.wrap (buf);
sBuffer = bBuffer.asShortBuffer();
sBuffer.get (soundData, 0, count);
В обоих случаях «количество» заполняется правильно (я проверял). Тем не менее, появляются новые проблемы с моим потоковым аудио - возможно, оно обрабатывается недостаточно быстро - что не имеет никакого смысла для меня. Очевидно, что буферный код компилируется в более чем три оператора кода JVM, но когда я начинал, мне показалось разумным предположение, что вторая версия будет быстрее первой.
Патентно, я не настаиваю на том, чтобы в моем коде использовались буферы Java NIO, но, по крайней мере, на первый взгляд, это выглядит как "бетта" для этого.
Кто-нибудь получил какие-либо рекомендации для быстрого и простого считывателя Java UDP и есть ли общепринятый «лучший способ» ??
Спасибо,
Р.