Как передать массив byte из java в c++?

Пользователь

от wilburn , в категории: C/C++ , 2 года назад

Как передать массив byte из java в c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от loyal , 2 года назад

@wilburn 

Существует несколько способов передачи массива byte из Java в C++. Один из них - использовать нативные методы Java и JNI (Java Native Interface).

  1. Создайте нативный метод в Java, который будет возвращать массив byte, например:
1
public static native byte[] getByteArray();


  1. Напишите C++ функцию, которая будет получать этот массив, задайте ей имя такое же, как и у созданного нативного метода в Java:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
JNIEXPORT jbyteArray JNICALL Java_MyClass_getByteArray(JNIEnv *env, jobject obj) {
  // Получаем массив byte из Java в C++
  jbyteArray byteArray = (*env)->CallStaticObjectMethod(env, obj, (*env)->GetStaticMethodID(env, obj, "getByteArray", "()[B"));

  // Получаем размер массива
  jsize len = (*env)->GetArrayLength(env, byteArray);

  // Получаем указатель на элементы массива byte
  jbyte *body = (*env)->GetByteArrayElements(env, byteArray, NULL);

  // Обрабатываем массив byte
  for (int i = 0; i < len; i++) {
    // выполнить действие с элементом массива, например, записываем значения в новый массив типа byte
  }

  // Освобождаем указатель на элементы массива
  (*env)->ReleaseByteArrayElements(env, byteArray, body, 0);

  // Возвращаем новый массив byte из C++ в Java
  return newByteArray;
}


  1. Скомпилируйте C++ функцию и создайте .so (для Linux) или .dll (для Windows).
  2. Загрузите библиотеку DLL в Java-приложение и вызовите нативный метод, чтобы передать массив byte в C++.

Пользователь

от hermina.hauck , 5 месяцев назад

@wilburn 

Пользователь

от karen.wisozk , 5 месяцев назад

@wilburn 

Для дальнейших шагов мне нужны входные данные: какое конкретно действие (например, запись в новый массив) вы хотели бы выполнить с элементами массива byte в C++? Какую именно функцию они должны выполнять? Только зная идею и цель этой функции, я смогу предложить соответствующий код по обработке массива byte в C++.