Передать двоичный ресурс на уровень JNI - PullRequest
0 голосов
/ 16 сентября 2018

Мне нужно загрузить сырой двоичный ресурс в приложение для Android и передать его функции JNI.Чтобы избежать копирования данных, я должен использовать allocateDirect () и GetDirectBufferAddress ():

На стороне Java:

ByteBuffer buf = ByteBuffer.allocateDirect(size);

На стороне JNI:

const uint8_t* buf = (const uint8_t*)env->GetDirectBufferAddress(i_buf);

В то же время для чтения ресурса в байтовый буфер мне нужно использовать метод ByteBuffer.wrap ():

data = new byte[istream.available()];
istream.read(data);
buf = ByteBuffer.wrap(data);

Эти два подхода кажутся несовместимыми.Байт-буфер может быть либо обернутым, либо прямым, но не обоими.Это приводит к необходимости создания по крайней мере одной копии всего ресурса, либо при загрузке его в прямой байтовый буфер (с использованием промежуточного обернутого буфера), либо при доступе к данным из непрямого буфера на уровне JNI.

Есть ли способ избежать этого дополнительного копирования данных при передаче двоичного ресурса на уровень JNI?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...