我正在开发一个项目,我想在 Android SDK 级别和 Android NDK 级别之间发送一个字节缓冲区。
推荐的方法似乎是使用 ByteBuffer 使用 allocateDirect() 方法,即在 SDK 级别执行:
ByteBuffer frameBuf = ByteBuffer.allocateDirect( 10000 );
int frameSize = fillMyArrayMethod(frameBuf.array());
UseArrayInNdk(frameBuf);
在我的 ICS 手机上一切正常,但是在我朋友的 Android 2.3.3 版本上,代码崩溃了。
调查发现,2.3.3版本手机上抛出UnsupportedOperationException异常的是ByteBuffer的array()方法。
显然 Honeycomb 以下的 Android 版本不支持此方法。
因此,由于我无法获得指向缓冲区的数组指针,我现在不得不在我的 NDK 中使用它之前为数组中的所有数据创建一个额外的 put(),即像这样:
ByteBuffer frameBuf = ByteBuffer.allocateDirect( 10000 );
Byte[] tmpBuf = new byte[10000];
int frameSize = fillMyArrayMethod(tmpBuf);
for (int i=0; i<frameSize; i++)
{
frameBuf.put(i, tmpBuf[i]);
}
UseArrayInNdk(frameBuf);
好吧,在 Android Honeycomb 及以上代码上执行此操作很好,但在 2.3.3 及以下版本是否有更智能的方法来避免额外的复制?