如何将IntBuffer复制到int []

时间:2018-02-02 14:18:56

标签: java nio

使用off heap buffers时,可能需要将它们复制到数组中。 让我们假设我们不知道缓冲区是关闭还是堆栈。 如何填写实施?

IntBuffer b = ... // could be off or on -heap
int[] array = toArray(b)

public int[] toArray(IntBuffer b) {
    //???
}

1 个答案:

答案 0 :(得分:6)

以下代码适用于直接缓冲区和数组支持的缓冲区。

它还应该考虑共享缓冲区,例如,一半的缓冲区var myObject = new ObjectWithMultipleProps { Prop1 = "", Prop2 = 0, Prop3 = "", ...etch } 允许您在两个缓冲区切片上调用[0, 1, 2, 3]并返回您期望的内容。

它将复制该特定缓冲区的全部内容(无论是否切片),而不考虑位置或限制。它对非阵列支持的缓冲区有很多副作用,所以不要写这样的代码(至少记录副作用)。

toArray()

因为public int[] toArray(IntBuffer b) { if(b.hasArray()) { if(b.arrayOffset() == 0) return b.array(); return Arrays.copyOfRange(b.array(), b.arrayOffset(), b.array().length); } b.rewind(); int[] foo = new int[b.remaining()]; b.get(foo); return foo; } 返回实际的后备数组,所以任何更改都会反映在缓冲区中。如果您不希望这样,请在返回之前array()数组(切片缓冲区不需要,因为clone()用于它们)。

那里可能存在一些未经考虑的边缘情况,所以如果你发现任何情况,请在下方发表评论,我会以(令人讨厌的)惊喜奖励你。