最好的方法是什么?
我尝试了以下方法:
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 [].所以现在我有一个例外是有意义的.
只有当您希望阵列只是一个副本时,这才有效.
final DoubleBuffer buffer = cacheBuffer.asDoubleBuffer();
final double[] copy = new double[buffer.remaining()];
buffer.get(copy);
Run Code Online (Sandbox Code Playgroud)
尝试失败的原因是因为array只支持非直接缓冲区; 直接缓冲区不由数组支持.
| 归档时间: |
|
| 查看次数: |
2402 次 |
| 最近记录: |