Sto lavorando su un'applicazione Android (ovviamente in Java) e di recente ho aggiornato il mio codice lettore UDP. In entrambe le versioni, ho creato alcuni buffer e ricevere un pacchetto UDP:Le classi Java ByteBuffer/IntBuffer/ShortBuffer sono veloci?
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
Nella versione iniziale, ho messo i dati di nuovo insieme un byte alla volta (in realtà è 16 PCM dati audio):
for (int i = 0; i < count; i++)
soundData[i] = (short) (((buf[k++]&0xff) << 8) + (buf[k++]&0xff));
Nella versione aggiornata, ho usato alcuni strumenti Java interessanti che non sapevo quando ho iniziato:
bBuffer = ByteBuffer.wrap (buf);
sBuffer = bBuffer.asShortBuffer();
sBuffer.get (soundData, 0, count);
In entrambi i casi, "contare" viene popolata correttamente (ho controllato). Tuttavia, sembra che ci siano nuovi problemi con il mio streaming audio - forse non viene gestito abbastanza velocemente - che non ha alcun senso per me. Ovviamente, il codice del buffer si sta compilando in molte più di tre dichiarazioni di codice JVM, ma è sembrato sicuramente un presupposto ragionevole quando avvio che la seconda versione sarebbe più veloce della prima.
Patentemente, non sto insistendo sul fatto che il mio codice DEVE utilizzare i buffer NIO Java, ma a prima vista, almeno, sembra proprio un 'betta' fare questo.
Qualcuno ha qualche raccomandazione per un lettore Java UDP veloce e semplice e se esiste un "modo migliore" generalmente accettato?
Grazie, R.
NIO non è progettato per essere più veloce di IO "normale", è solo più scalabile. – skaffman
'rubato la sintassi' Lol sei serio? Google ha rubato la sintassi java tanto quanto un autore elabora la sintassi inglese – Falmarri
@Tim Bender che cosa ha a che fare con la domanda? Potrebbero esserci delle differenze tra il vm di Dalvik rispetto al jvm standard, ma in generale se le cose sono lente nella jvm è probabile che siano anche lente su Android. Hai una certa conoscenza di una differenza che potrebbe influenzare questo caso particolare? –