Это может быть вашей отправной точкой. Я публикую пример в Stackblitz . Я интерполирую, чтобы указать размер строки, используя PrimeNg. Я мог бы применить rowspan для таблицы HTML сейчас. Пожалуйста, отредактируйте его, чтобы импровизировать этот пример согласно требованиям.
Для будущих вопросов, пожалуйста, посетите Stackblitz, чтобы опубликовать рабочий пример.
Swig также упрощает JNI.
С точки зрения скорости, я подозреваю, что будут небольшие отклонения - я настоятельно рекомендую вам выбрать звонок, который, как вы знаете, вы будете делать много, и сравнить все предлагаемые решения.
Довольно Несколько параметров влияют на производительность интерфейсов между языками программирования: на каком устройстве работает JVM, кто его разработал (если это не обычная Sun JVM), нужно ли вам вызывать код Java из нативного кода, модель многопоточности JVM в вашей операционной системе и то, насколько асинхронным будет нативный код ...
Я боюсь, вы не найдете надежного эталона, который бы точно измерял то, что вам нужно.
В этой записи блога утверждается, что из-за механизмов самоанализа, используемых JNA, это будет значительно медленнее, чем JNI. Я подозреваю, что NativeCall будет использовать аналогичные механизмы и, следовательно, работать аналогичным образом.
Однако вам, вероятно, следует проводить тесты на основе конкретных объектов, на которые вы ссылаетесь, и / или выполнять маршалинг между Java и C.
Я бы поддержал рекомендацию SWIG . Это делает жизнь особенно легкой (более легкой) для взаимодействия Java / C.
JNI - самый быстрый. JNA очень медленный по сравнению с JNI (издержки на вызовы, вероятно, на порядок), но это фантастическая библиотека, потому что она делает нативный доступ таким простым. JNA отлично подходит, если вам нужно время от времени вызывать какой-то нативный API. Если вам небезразлична производительность, я бы не стал использовать ее в каких-либо «плотных петлях».
Я не уверен, где NativeCall вписывается в спектр.