我有一个ByteBuffer
包含三个双重值,例如{1.0, 2.0, 3.0}
.我现在拥有的是什么
double[] a = new double[3]; for (int i = 0; i < 3; i++) { a[i] = byteBuffer.getDouble(); }
哪个工作正常,但我更喜欢一步到位的解决方案
double[] a = byteBuffer.asDoubleBuffer().array();
但这导致了一个例外:
java.lang.UnsupportedOperationException at java.nio.DoubleBuffer.array(...)
我究竟做错了什么?
你在滥用DoubleBuffer
.DoubleBuffer.array()
返回支持DoubleBuffer
if的数组,仅当它是DoubleBuffer
由数组支持的数组时才返回.这个不是.它有一个支持ByteBuffer
.实际上,这DoubleBuffer
只是对原作的看法ByteBuffer
.
您可以ByteBuffer
通过调用hasArray()
方法找出数组是否支持任何特定内容.
请参阅Peter Lawrey关于将a的内容DoubleBuffer
转换为数组的代码的答案double
.(他打败了我.:-))
根据文档,array
是一个可选操作:
public final double[] array()返回支持此缓冲区的double数组(可选操作).
您可以array
通过调用来判断呼叫是否正常hasArray()
.
您可以按如下方式创建数组:
DoubleBuffer dbuf = byteBuffer.asDoubleBuffer(); // Make DoubleBuffer double[] a = new double[dbuf.remaining()]; // Make an array of the correct size dbuf.get(a); // Copy the content into the array