Estoy trabajando en una aplicación de Android (en Java, obviamente) y recientemente actualicé mi código de lector UDP. En ambas versiones, he creado algunas memorias intermedias y recibir un paquete UDP:¿Las clases de ByteBuffer/IntBuffer/ShortBuffer Java son rápidas?
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
En la versión inicial, puse los datos de nuevo juntos un byte a la vez (en realidad 16 PCM datos de audio):
for (int i = 0; i < count; i++)
soundData[i] = (short) (((buf[k++]&0xff) << 8) + (buf[k++]&0xff));
En la versión actualizada, que utiliza algunas herramientas Java fresco que no conocía de cuando empecé:
bBuffer = ByteBuffer.wrap (buf);
sBuffer = bBuffer.asShortBuffer();
sBuffer.get (soundData, 0, count);
En ambos casos, "contar" se está rellena correctamente (he comprobado). Sin embargo, parece haber nuevos problemas con mi transmisión de audio, tal vez no se esté manejando lo suficientemente rápido, lo cual no tiene ningún sentido para mí. Obviamente, el código del búfer se está compilando en más de tres declaraciones de código JVM, pero desde el comienzo parecía una suposición razonable que la 2da versión sería más rápida que la 1ra.
Patentemente, no estoy insistiendo en que mi código TIENE que usar búferes Java NIO, pero a primera vista, al menos, parece una mo 'betta' hacer esto.
¿Alguien tiene alguna recomendación para un lector de UDP Java simple y rápido y si existe una "mejor manera" generalmente aceptada?
Gracias, R.
NIO no está destinado a ser más rápido que el IO "normal", es simplemente más escalable. – skaffman
'robó la sintaxis' ¿Lol, hablas en serio? Google robó la sintaxis de Java tanto como un autor la sintaxis en inglés – Falmarri
@Tim Bender, ¿qué tiene eso que ver con la pregunta? Puede haber diferencias entre el Dalvik vm y el jvm estándar, pero en general si las cosas son lentas en el jvm, es probable que también sean lentas en Android. ¿Tiene algún conocimiento de una diferencia que podría afectar este caso particular? –