2010-01-17 6 views

ответ

1

Да. Как уже упоминалось, JNI или Java Native Interface являются предпочтительным способом Sun. Если вы считаете, что вам нужно вызвать код C с других языков, а также с Java, я бы посмотрел на SWIG, который будет прозрачно генерировать код JNI для вас, но также позволит вам делать подобные вещи, например, Python.

4

Да, вы можете это сделать. Неважно, должен сделать другое дело.

На про стороне:

  • Вызов библиотеки C из Java позволит избежать необходимости перекодировать библиотек в Java (но см. Ниже)

  • Для некоторых вычислительных интенсивных алгоритмов хорошо написанная реализация C может быть быстрее, чем эквивалентно хорошо написанная версия Java.

  • Некоторые операции конкретной операционной системы не могут быть реализованы в чистой Java.

На стороне мошенника:

  • Существует большие накладные расходы при принятии вызова JNI против простого метода Java вызова.

  • Если ваша библиотека C не является потокобезопасной, вы должны быть очень осторожны, называя ее Java. И, как правило, библиотеки C не реализуются с учетом безопасности потоков.

  • Если ваша библиотека C имеет проблемы с управлением памятью, это может дестабилизировать платформу Java, что приводит к сбоям JVM.

  • Вызов собственных библиотек сразу означает, что ваше приложение сложнее переносить и требует более сложного процесса сборки.

0

Есть целый ряд C to (Java) bytecode compilers, которые могут быть в состоянии превратить ваш код C в .jar портативных Java классов, которые вы можете позвонить непосредственно из Java.

подрывов против JNI:

  • Существует заметное снижение производительности, как правило, по меньшей мере, 100%.

Преимущества в сравнении с JNI:

  • Так же, как работает код чистой Java, она безопасна, не требует специальных привилегий для загрузки, и не требует перекомпиляции для каждой целевой платформы.

(Когда я говорю «JNI» Я действительно имею в виду все интерфейсы Java в машинный код. Например, то же самое относится и к CNI.)

+0

Другим ущербом по сравнению с JNI является то, что вы не сможете делать определенные вещи на платформе таким образом ... и это (IMO) самый важный прецедент для библиотек C. –

Смежные вопросы