Являются ли классы Java ByteBuffer / IntBuffer / ShortBuffer быстрыми?

Я работаю над приложением для 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, но когда я начинал это, мне казалось разумным предположение, что вторая версия будет быстрее, чем первая.

Патентно, Р.

5
задан Tim Bender 27 October 2010 в 22:15
поделиться