Ich arbeite an einer Android-Anwendung (natürlich in Java) und habe kürzlich meinen UDP-Lesecode aktualisiert. In beiden Versionen richte ich einige Puffer ein und empfange ein UDP-Paket:
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
In der ersten Version habe ich die Daten Byte für Byte wieder zusammengesetzt (es sind eigentlich 16 PCM-Audiodaten):
for (int i = 0; i < count; i++)
soundData[i] = (short) (((buf[k++]&0xff) << 8) + (buf[k++]&0xff));
In der aktualisierten Version habe ich einige coole Java-Tools verwendet, die ich zu Beginn nicht kannte:
bBuffer = ByteBuffer.wrap (buf);
sBuffer = bBuffer.asShortBuffer();
sBuffer.get (soundData, 0, count);
In beiden Fällen wird "count" korrekt ausgefüllt (ich habe es überprüft). Allerdings scheint es neue Probleme mit meinem Audio-Streaming zu geben - vielleicht wird es nicht schnell genug verarbeitet - was für mich keinen Sinn ergibt. Offensichtlich wird der Puffercode in viel mehr als nur drei Anweisungen des JVM-Codes kompiliert, aber es schien eine vernünftige Annahme zu sein, als ich damit begann, dass die zweite Version schneller sein würde als die erste.
Offensichtlich bestehe ich nicht darauf, dass mein Code Java NIO-Puffer verwenden MUSS, aber auf den ersten Blick zumindest, es scheint wie ein mo 'betta', um dies zu tun.
Hat jemand irgendwelche Empfehlungen für einen schnellen, einfachen Java UDP-Reader und ob es einen allgemein akzeptierten "besten Weg" gibt?
Danke! R.