バイト配列をdoubleに変換する必要があります。使っています
double dvalue = ByteBuffer.wrap(value).getDouble();
しかし、実行時に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)
ここで何を変更する必要がありますか?
BufferUnderflowException - If there are fewer than eight bytes remaining in this buffer
したがって、value
は8バイト未満でなければなりません。 A double
は64ビット、8バイトのデータ型です。
あなたのコードは次のようなものです:
byte [] value = { // values };
double dvalue = ByteBuffer.wrap(value).getDouble();
もしそうなら、それはうまくいくはずです。
value
配列のデータを表示してください。
oracleから docs :
Throws: BufferUnderflowException - If there are fewer than eight bytes remaining in this buffer
これを修正するには、ダブル(8 bytes)
を読み取るために、ByteBuffer
に十分なデータがあることを確認する必要があります。
見てください ここ は、入力データと出力で必要なものを示す簡単なコードです。