首页 > 解决方案 > 用于运行和调试的 ByteBuffer 的不同行为

问题描述

byte[] arr;

ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 0x00);
buffer.put(new byte[] {0x01, 0x02});
buffer.put(new byte[] {0x03, 0x04, 0x05});
buffer.put(new byte[] {0x06, 0x07, 0x08, 0x09});
arr = buffer.array();

for(byte c : arr) {
    System.out.format("%d ", c);
}

当我运行上面的代码行时,它会根据需要打印输出。

0 1 2 3 4 5 6 7 8 9

当我用 Debug 运行它时,我又得到了我想要的结果。

0 1 2 3 4 5 6 7 8 9 

现在我在任何一行都放了一个断点。当我在调试模式下用手移动应用程序时,只添加最后一个字节序列。它实际上添加了所有字节数组,但是从索引 0 开始添加所有字节数组,结果是

6 7 8 9 0 0 0 0 0 0

我不知道为什么会这样。是调试器的问题吗?

我正在使用 IntelljIdea 和 java1.8.0_162。当我输入 VM 选项 -Djava.compiler=NONE 时,一切正常。这个过程发生了什么变化?

谢谢你的帮助。

标签: javadebuggingcompiler-optimizationbytebuffer

解决方案


推荐阅读