Каков наиболее эффективный способ получить Java-буфер в нативный код под JNI? - PullRequest
1 голос
/ 17 сентября 2010

Проблема:

Нативный код моего кода (c / c ++) вызывается через JNI.

После запуска необходимо получить буфер байтов [] из Javaобъект несколько раз в секунду для дальнейшей тяжелой обработки.Собственный код должен запрашивать буфер, когда обработка предыдущего буфера завершена.

Первоначальная идея состояла в том, чтобы передавать буфер через сокет AF_INET, чтобы избежать JNI, но это решение не работало достаточно эффективно.

Возможные решения:

Существуют следующие способы улучшения проходящего буфера:

  1. JNI вещи
  2. AF_LOCAL
  3. ???

Какой самый эффективный способ получить буфер java byte [] из собственного кода?

1 Ответ

1 голос
/ 07 апреля 2011

Вы должны быть в состоянии использовать JNI для этого.

Посмотрите на функцию JNI GetPrimitiveArrayCritical().Будет ли это делать копия, зависит от реализации JVM в соответствии с документами, но на практике это хорошо сработало для меня.

В качестве альтернативы, вы можете использовать ByteBuffer, который был разработан для этого.Обратите внимание, что вы захотите создать свой ByteBuffer, используя его метод allocateDirect(), а затем получить указатель на буфер в JNI, используя GetDirectBufferAddress().

...