Java:将直接ByteBuffer转换为double []

aar*_*qli 2 java

最好的方法是什么?

我尝试了以下方法:

ByteBuffer cacheBuffer=ByteBuffer.allocateDirect(nm(nLimit,0));  //where nm(nLimit,0) is a large number
double[] cache=cacheBuffer.asDoubleBuffer().array();
Run Code Online (Sandbox Code Playgroud)

但我得到了这个例外:

java.lang.UnsupportedOperationException
at java.nio.DoubleBuffer.array(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

为什么?

编辑:

它看起来像javadoc"返回支持此缓冲区的双数组(可选操作)." 实际上意味着array()方法只是返回已经支持此缓冲区的double数组.我以为它会以某种方式将缓冲区转换为double [].所以现在我有一个例外是有意义的.

old*_*inb 6

只有当您希望阵列只是一个副本时,这才有效.

final DoubleBuffer buffer = cacheBuffer.asDoubleBuffer();
final double[] copy = new double[buffer.remaining()];
buffer.get(copy);
Run Code Online (Sandbox Code Playgroud)

尝试失败的原因是因为array只支持非直接缓冲区; 直接缓冲区不由数组支持.