Я хочу получить данные из сокета в нативной части, а затем прочитать данные в коде Java.
Я знаю, что прямой ByteBuffer может быть хорошим выбором. Поэтому я подготавливаю ByteBuffer в Java что-то вроде
ByteBuffer myBuffer = ByteBuffer.allocateDirect(128);
И я получаю этот ByteBuffer в нативном по следующему коду
JNIEXPORT jboolean JNICALL Java_nfore_android_bt_pro_nfhfp_rcvSco(JNIEnv *env, jobject this, jint fd, jobject buff){
int buff_size;
int socketfd;
jbyte *BUFF = (*env)->GetDirectBufferAddress(env, buff);
buff_size = (*env)->GetDirectBufferCapacity(env, buff);
socketfd = fd; .....}
Теперь моя глупая проблема:
(1) Правильно ли, что я могу получить переменную типа int socketfd просто из оператора
"socketfd = fd" ??? (fd это тип jint, и это действительно сокет fd в Linux)
(2) Как я могу записать данные в этот ByteBuffer в C ???
В самом деле, ...
Моя ситуация такова, что я получаю сокет Linux fd в другой встроенной функции C ++, однако я не могу добавить в нее нужные функции. Я хочу использовать этот fd для чтения / записи данных, но я знаю, что это невозможно в коде Java. Поэтому я решил передать его в native и использовать прямой ByteBuffer для хранения временных данных.
Есть предложения?
Спасибо.