gpt4 book ai didi

java - 对byte[]和int[]进行操作,同一个内存

转载 作者:行者123 更新时间:2023-11-29 05:36:21 24 4
gpt4 key购买 nike

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

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[] pixelDatabyte[] pixelDataBytes 都指向内存。如果您理解我的意思,那就是内存中相同位的两个不同“ View ”。然后我可以在不移动它们的情况下更新单个字节,同时仍然保持代码其他部分所需的 int[] 表示。看起来这应该是可能的,但我还没有想出如何去做。

最佳答案

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

创建它:

ByteBuffer bb = ByteBuffer.wrap(buf);

并得到一个 IntBuffer:

IntBuffer ib = bb.asIntBuffer();

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

ib.put(2, 400);

2 是索引,400 是值。 ib 的任何更改都将得到 bbbuf 的支持。

关于java - 对byte[]和int[]进行操作,同一个内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com