web-dev-qa-db-fra.com

java.nio.BufferUnderflowException lors de la conversion d'un tableau d'octets en double

J'ai besoin de convertir un bytearray en double. j'utilise

double dvalue = ByteBuffer.wrap(value).getDouble();

Mais au moment de l'exécution, je reçois une exception BufferUnderflowException

Exception in thread "main" Java.nio.BufferUnderflowException
    at Java.nio.Buffer.nextGetIndex(Buffer.Java:498)
    at Java.nio.HeapByteBuffer.getDouble(HeapByteBuffer.Java:508)
    at Myclass.main(Myclass.Java:39)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:606)
    at org.Apache.hadoop.util.RunJar.main(RunJar.Java:212)

Que dois-je changer ici?

13

ByteBuffer#getDouble() jette

 BufferUnderflowException - If there are fewer than eight bytes remaining in this buffer

Donc value doit contenir moins de 8 octets. Un double est un type de données 64 bits, 8 octets.

15

Votre code ressemble à ceci:

byte [] value = { // values };
double dvalue = ByteBuffer.wrap(value).getDouble();

Si c'est le cas, cela devrait fonctionner.

Et montrez-nous vos données du tableau value.

depuis Oracle docs :

Throws: BufferUnderflowException - If there are fewer than eight bytes remaining in this buffer

Pour y remédier, vous devez vous assurer que le ByteBuffer contient suffisamment de données pour pouvoir lire un double (8 bytes).

Regardez ici est un code simple pour montrer ce que vous voulez avec les données d'entrée et de sortie.

3
user3145373 ツ