gpt4 book ai didi

java - ByteBuffer.allocateDirect(size) 不在 Android 2.2 模拟器中创建支持 byte[]

转载 作者:行者123 更新时间:2023-12-01 14:58:53 24 4
gpt4 key购买 nike

我是安卓新手。我似乎找不到相关的论坛帖子。

令我困惑的是 allocateDirect() 确实在 Android 4.2 模拟器中创建支持 byte[]。

更具体地说,我分配一个 ByteBuffer,并多次调用 buffer.put(byte[]) 来写入 ByteBuffer 的内容。然后我想交出支持字节[]进行压缩。它访问引发 UnsupportedOperationException 的支持 byte[]。

这是运行 Android 2.2 模拟器时写入后生成的缓冲区内容:

enter image description here

这是运行 Android 4.2 模拟器时写入后生成的缓冲区内容:

enter image description here

区别似乎在于是否创建了 bufferRef.block (它是在 Android 4.2 模拟器中分配 ByteBuffer 时创建的)。我更愿意始终使用直接的 ByteBuffer。作为解决方法,我检查是否有权访问支持 byte[],如果没有,则使用 ByteBuffer.allocate(size) 重新分配。

        ByteBuffer buf;
try {
buf = ByteBuffer.allocateDirect(this.maxBufferSize);
if(!buf.hasArray()) { //some API levels either don't expose or create the backing byte[]
buf = null;
buf = ByteBuffer.allocate(this.maxBufferSize);
}
} catch (Exception e) {
return false;
}

所以,我的问题是,有没有办法保证直接字节缓冲区始终有一个支持字节[](假设有足够的内存)?或者我必须接受这种解决方法吗?

环境:

ADT 版本:v21.0.0-519525

Android 2.2 模拟器配置:

更新了基于 Android 2.2、ARM (armeabi) 处理器的 AVD“AVD_for_Galaxy_Nexus_by_Google”,[2012-12-20 10:09:34 - SDK 管理器] 具有以下硬件配置:

[2012-12-20 10:09:34 - SDK 管理器] hw.sdCard=no

[2012-12-20 10:09:34 - SDK 管理器] hw.device.manufacturer=Google

[2012-12-20 10:09:34 - SDK 管理器] hw.mainKeys=no

[2012-12-20 10:09:34 - SDK 管理器] hw.lcd.密度=320

[2012-12-20 10:09:34 - SDK 管理器] hw.accelerometer=yes

[2012-12-20 10:09:34 - SDK 管理器] hw.dPad=no

[2012-12-20 10:09:34 - SDK 管理器] hw.device.hash=-708107041

[2012-12-20 10:09:34 - SDK 管理器] hw.trackBall=no

[2012-12-20 10:09:34 - SDK 管理器] hw.device.name=Galaxy Nexus

[2012-12-20 10:09:34 - SDK 管理器] hw.camera.back=none

[2012-12-20 10:09:34 - SDK 管理器] hw.sensors.proximity=yes

[2012-12-20 10:09:34 - SDK 管理器] hw.battery=yes

[2012-12-20 10:09:34 - SDK 管理器] disk.dataPartition.size=200M

[2012-12-20 10:09:34 - SDK 管理器] hw.audioInput=yes

[2012-12-20 10:09:34 - SDK 管理器] hw.sensors.orientation=yes

[2012-12-20 10:09:34 - SDK 管理器] hw.camera.front=none

[2012-12-20 10:09:34 - SDK 管理器] hw.gps=yes

[2012-12-20 10:09:34 - SDK 管理器] Skin.dynamic=no

[2012-12-20 10:09:34 - SDK 管理器] hw.keyboard=yes

[2012-12-20 10:09:34 - SDK 管理器] vm.heapSize=64

[2012-12-20 10:09:34 - SDK 管理器] hw.ramSize=512

最佳答案

更好的答案是.allocateDirect()不会创建后备数组。您必须调用 ByteBuffer.get(byte[]) 来从给定缓冲区填充数组。

关于java - ByteBuffer.allocateDirect(size) 不在 Android 2.2 模拟器中创建支持 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13978809/

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