【发布时间】:2018-02-27 18:21:47
【问题描述】:
在以下情况下,我很难理解 ByteBuffer 的语义:
int sizeOfDouble = 8;
int numberOfDoubles = 4;
ByteBuffer testBuf = ByteBuffer.allocateDirect(sizeOfDouble*numberOfDoubles);
testBuf.putDouble(0, 1.0);
testBuf.putDouble(1, 2.0);
testBuf.putDouble(2, 3.0);
testBuf.putDouble(3, 4.0);
for (int i = 0; i < numberOfDoubles; ++i) {
System.out.println("testBuf[" + i + "]: " + testBuf.getDouble(i));
}
我希望看到我刚刚放入 ByteBuffer 的值打印到屏幕上。相反,我得到了这个输出:
testBuf[0]: 4.959404759574682E-4
testBuf[1]: 32.50048828125
testBuf[2]: 32.125
testBuf[3]: 4.0
第三个索引的值似乎符合我的预期:4.0。但是为什么值和索引 0、1 和 2 与我插入的值(分别为 1.0、2.0 和 3.0)不匹配?
我怀疑我误解了 ByteBuffer 的工作原理,但我无法在 javadoc 中找到它。
【问题讨论】:
-
我还没有与
ByteBuffer合作过,但是您不必访问8 的倍数的索引吗?毕竟,double有 8 个字节大。例如:testBuf.putDouble(0, 1.0); testBuf.putDouble(8, 2.0); testBuf.putDouble(16, 3.0); testBuf.putDouble(24, 4.0);。getDouble也是如此。
标签: java bytebuffer