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

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

от wilburn , в категории: C/C++ , 9 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от loyal , 9 месяцев назад

@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++.