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?
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.
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.