我的代码是:
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)