Mic*_*ner 4 java nio bytebuffer nio2
我有一个ByteBuffer包含三个双重值,例如{1.0, 2.0, 3.0}.我现在拥有的是什么
double[] a = new double[3];
for (int i = 0; i < 3; i++) {
a[i] = byteBuffer.getDouble();
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但我更喜欢一步到位的解决方案
double[] a = byteBuffer.asDoubleBuffer().array();
Run Code Online (Sandbox Code Playgroud)
但这导致了一个例外:
java.lang.UnsupportedOperationException at java.nio.DoubleBuffer.array(...)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
你在滥用DoubleBuffer.DoubleBuffer.array()返回支持DoubleBuffer if的数组,仅当它是DoubleBuffer由数组支持的数组时才返回.这个不是.它有一个支持ByteBuffer.实际上,这DoubleBuffer只是对原作的看法ByteBuffer.
您可以ByteBuffer通过调用hasArray()方法找出数组是否支持任何特定内容.
请参阅Peter Lawrey关于将a的内容DoubleBuffer转换为数组的代码的答案double.(他打败了我.:-))
根据文档,array是一个可选操作:
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |