Просто из интереса, можно ли вызвать модуль C из модуля java? Если да, то как это сделать?Может ли модуль java вызвать c-модуль?
ответ
да, вы можете использовать Java Native Interface сделать это:
Посмотрите в JNI (Java Native Interface).
Да. Как уже упоминалось, JNI или Java Native Interface являются предпочтительным способом Sun. Если вы считаете, что вам нужно вызвать код C с других языков, а также с Java, я бы посмотрел на SWIG, который будет прозрачно генерировать код JNI для вас, но также позволит вам делать подобные вещи, например, Python.
Да, вы можете это сделать. Неважно, должен сделать другое дело.
На про стороне:
Вызов библиотеки C из Java позволит избежать необходимости перекодировать библиотек в Java (но см. Ниже)
Для некоторых вычислительных интенсивных алгоритмов хорошо написанная реализация C может быть быстрее, чем эквивалентно хорошо написанная версия Java.
Некоторые операции конкретной операционной системы не могут быть реализованы в чистой Java.
На стороне мошенника:
Существует большие накладные расходы при принятии вызова JNI против простого метода Java вызова.
Если ваша библиотека C не является потокобезопасной, вы должны быть очень осторожны, называя ее Java. И, как правило, библиотеки C не реализуются с учетом безопасности потоков.
Если ваша библиотека C имеет проблемы с управлением памятью, это может дестабилизировать платформу Java, что приводит к сбоям JVM.
Вызов собственных библиотек сразу означает, что ваше приложение сложнее переносить и требует более сложного процесса сборки.
Есть целый ряд C to (Java) bytecode compilers, которые могут быть в состоянии превратить ваш код C в .jar портативных Java классов, которые вы можете позвонить непосредственно из Java.
подрывов против JNI:
- Существует заметное снижение производительности, как правило, по меньшей мере, 100%.
Преимущества в сравнении с JNI:
- Так же, как работает код чистой Java, она безопасна, не требует специальных привилегий для загрузки, и не требует перекомпиляции для каждой целевой платформы.
(Когда я говорю «JNI» Я действительно имею в виду все интерфейсы Java в машинный код. Например, то же самое относится и к CNI.)
Другим ущербом по сравнению с JNI является то, что вы не сможете делать определенные вещи на платформе таким образом ... и это (IMO) самый важный прецедент для библиотек C. –
- 1. не может вызвать модуль kotlin из модуля java
- 2. Может ли java вызвать скрипт для перезапуска java в Solaris?
- 3. Java MySQL может вызвать тупик?
- 4. Может ли модуль загрузить файлы?
- 5. Можно ли вызвать модуль Python из ObjC?
- 6. Может ли функция вызвать себя?
- 7. Может ли Maven развертывать модуль для JBoss?
- 8. Может ли утечка памяти вызвать только OutOfMemoryError в Java?
- 9. Может ли статический метод вызвать метод экземпляра в Java
- 10. Может ли Java paint() вызвать только один раз?
- 11. Как вызвать импортированный модуль?
- 12. Может ли страница ошибки JSP вызвать проблемы?
- 13. Symfony не может вызвать какой-либо модуль. конфиг?
- 14. модуль повышения напряжения не может вызвать функцию mpi
- 15. Может ли модуль python-pptx вставить видео?
- 16. Может ли модуль C++ obj быть протестирован?
- 17. Python - может ли класс действовать как модуль?
- 18. Может ли модуль JBoss зависеть от баночки
- 19. ruby: может ли модуль автоматически инициализировать код?
- 20. Может ли модуль Frege охватывать несколько файлов?
- 21. Может ли модуль работать после rmmod?
- 22. Может ли модуль WiFi определить местоположение?
- 23. Может ли модуль ES-2015 быть самопознающим?
- 24. Может ли модуль python иметь __repr__?
- 25. Может ли os.path.sep повлиять на модуль tarfile?
- 26. Суперкласс может вызвать подкласс
- 27. java не может вызвать второй класс
- 28. Вызов метода может вызвать java NullpointerException .setText()
- 29. Что может вызвать это поведение Java?
- 30. REST Java-клиент не может вызвать запрос
Спасибо всем, я просто хотел дать ему попробовать .. теперь, когда столько разговоров о взаимодействии :) – trinity