当前位置:  开发笔记 > 编程语言 > 正文

从ByteBuffer到双数组

如何解决《从ByteBuffer到双数组》经验,为你挑选了2个好方法。

我有一个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(...)

我究竟做错了什么?



1> Erick G. Hag..:

你在滥用DoubleBuffer.DoubleBuffer.array()返回支持DoubleBuffer if的数组,仅当它是DoubleBuffer由数组支持的数组时才返回.这个不是.它有一个支持ByteBuffer.实际上,这DoubleBuffer只是对原作的看法ByteBuffer.

您可以ByteBuffer通过调用hasArray()方法找出数组是否支持任何特定内容.

请参阅Peter Lawrey关于将a的内容DoubleBuffer转换为数组的代码的答案double.(他打败了我.:-))



2> dasblinkenli..:

根据文档,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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有