小编zcc*_*eil的帖子

为什么DirectByteBuffer.array()有额外的大小?

我的代码是:

if (frameRGBABuffer == null) {
    frameRGBABuffer = ByteBuffer.allocateDirect(cameraHeight * cameraWidth * 4)
        .order(ByteOrder.nativeOrder());
}

Log.d("tag",frameRGBABuffer.array().length)
Run Code Online (Sandbox Code Playgroud)

我的相机分辨率是1280×720,因此frameRGBABuffer应该分配3686400字节的空间.

但奇怪的是长度frameRGBABuffer.array()是3686407.为什么它有额外的7个字节空格?

顺便说一下,frameRGBABuffer.array()不会抛出异常并返回带有数据的byte []

似乎Android分配了7个额外的空间来处理对齐.源代码是:

MemoryRef(int capacity) {
    VMRuntime runtime = VMRuntime.getRuntime();
    buffer = (byte[]) runtime.newNonMovableArray(byte.class, capacity + 7);
    allocatedAddress = runtime.addressOf(buffer);

    // Offset is set to handle the alignment: http://b/16449607
    offset = (int) (((allocatedAddress + 7) & ~(long) 7) - allocatedAddress);
    isAccessible = true;
    isFreed = false;
}
Run Code Online (Sandbox Code Playgroud)

java android bytebuffer

3
推荐指数
1
解决办法
322
查看次数

标签 统计

android ×1

bytebuffer ×1

java ×1