1

我希望加快我的程序。目前我有一个功能可以做到这一点:

public void updateBitmap(byte[] buf, int thisPacketLength, int standardOffset, int thisPacketOffset) {      
    int pixelCoord = thisPacketOffset / 3 - 1;
    for (int bufCoord = standardOffset; bufCoord < thisPacketLength; bufCoord += 3) {
        pixelCoord++;
        pixelData[pixelCoord] = 0xFF << 24 | (buf[bufCoord + 2] << 16) & 0xFFFFFF | (buf[bufCoord + 1] << 8) & 0xFFFF | buf[bufCoord] & 0xFF;           
    }
}   

我基本上需要将整数byte[]形式复制到一个int[]数组中。我意识到,如果我可以将int[]数组视为字节数组,那么我可以直接修改字节,而不是进行所有这些移位,我想这会更快。但是,我不知道该怎么做。

我想要的是拥有int[] pixelData并且byte[] pixelDataBytes都指向记忆。如果您理解我的意思,只需成为内存中相同位的两个不同“视图”。然后我可以在不移动它们的情况下更新各个字节,同时仍然保持int[]代码其他部分所需的表示。似乎这应该是可能的,但我还没有想出如何做到这一点。

4

1 回答 1

3

您应该改用字节缓冲区。然后,您可以将其作为 int 缓冲区访问,并逐个字节或逐个 int 读/写,

创建它:

ByteBuffer bb = ByteBuffer.wrap(buf);

并获得一个 IntBuffer:

IntBuffer ib = bb.asIntBuffer();

您可以通过写入索引来设置此缓冲区中的值:

ib.put(2, 400);

2 是索引,400 是值。任何更改ib都将由bb和支持buf

于 2013-10-17T18:20:47.190 回答