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

标签 java

最好的方法是什么?

我尝试了以下方法:

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

但是我遇到了这个异常:

java.lang.UnsupportedOperationException
at java.nio.DoubleBuffer.array(Unknown Source)

为什么?

编辑:

它看起来像 javadoc“返回支持此缓冲区的 double 组(可选操作)”。实际上意味着 array() 方法只是返回已经支持该缓冲区的 double 组。我认为它将以某种方式将缓冲区转换为 double[] 。所以现在我得到了一个异常(exception)是有道理的。

最佳答案

只有当您希望数组只是一个副本时,这才有效。

final DoubleBuffer buffer = cacheBuffer.asDoubleBuffer();
final double[] copy = new double[buffer.remaining()];
buffer.get(copy);

您的尝试失败的原因是因为array仅支持非直接缓冲区;直接缓冲区不受数组支持。

关于Java:将直接 ByteBuffer 转换为 double[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12228152/

相关文章:

java - Eclipse 内存不足且运行缓慢

java - JBOSS 服务器停留在启动状态

java - Datanucleus 创建子查询而不是连接

java - 如何在比较器的映射中使用泛型以避免警告

java - Java 中的键绑定(bind)不起作用

Java 正则表达式 "\\d[a-zA-z]?"

java - 如何确保构建器模式完成?

java - 如何从流中的模型对象获取字段列表并映射到另一个模型对象?

java - Apache OpenJPA - NamedQuery 异常

java - 通过JNI启动JVM并进行远程调试