Я работаю над приложением для 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);
В обоих случаях «count» заполняется правильно (я проверял). Однако, похоже, возникают новые проблемы с моим потоковым аудио - возможно, с ним не справляются достаточно быстро - что не имеет для меня никакого смысла. Очевидно, что буферный код компилируется в гораздо больше, чем три оператора кода JVM, но когда я начинал это, мне казалось разумным предположение, что вторая версия будет быстрее, чем первая.
Патентно, Р.