2011-06-24 35 views

Respuesta

19

Puede utilizar ByteBuffer

de un byte[] bytes

double d = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getDouble(); 

de un zócalo

ByteBuffer bb = ByteBuffer.allocate(64*1024).order(ByteOrder.LITTLE_ENDIAN); 
socket.read(bb); 
bb.flip(); 
double d = bb.getDouble(); 
+1

Contribución extremadamente sólida, exactamente lo que necesitaba. Gracias (¡y a todos los que respondieron tan rápido!) Que tengas un buen fin de semana. – RedLeader

+0

un búfer directo sería mejor aquí (2da muestra), siempre que el búfer no se asigne con frecuencia y se reutilice. En tales casos, tiendo a usar el socket readBuffer como tamaño. – bestsss

+0

@bestsss, acordó que un ByteBuffer directo sería mejor si se administra correctamente. He encontrado que los buffers directos pueden ser hasta un 20% más rápidos. Si lo usa con la clase Inseguro, puede ser otro 30% más rápido. ;) –

0

Simplemente use DataInputStream para leer el archivo y utilice el método readDouble().

+1

DataInputStream es siempre "red ordenado", que es big endian. –

+0

"Una aplicación utiliza una secuencia de salida de datos para escribir datos que luego pueden leerse mediante una secuencia de entrada de datos". No creo que ese sea el caso aquí. – peter

1
  1. Convertir de little endian a big endian.
  2. Envuelva sus bytes convertidos en el uso de ByteBufferInputStream.
  3. Obtenga su número de doble precisión a través de DataInputStream.readDouble(in).

Como alternativa, puede simplemente tomar el cuerpo del método readDouble de la fuente JDK y se salta el paso 2 y 3.