Juste par intérêt, est-il possible d'appeler un module C à partir d'un module Java? Si oui, comment faire cela?Un module java peut-il appeler un module c?
Répondre
oui vous pouvez utiliser Java Native Interface pour ce faire:
Regardez dans JNI (Java Native Interface).
Oui. Comme d'autres l'ont déjà mentionné, JNI ou Java Native Interface est la méthode préférée de Sun pour ce faire. Si vous pensez que vous aurez besoin d'appeler le code C depuis d'autres langages ainsi que Java, je regarderai dans SWIG, qui générera le code JNI de manière transparente pour vous, mais vous permettra également de faire des choses similaires avec, par exemple, Python.
Oui, vous pouvez le faire. Si vous devrait le faire est une autre question.
Du côté pro:
Appel de bibliothèques C de Java évitera la nécessité de recoder les bibliothèques en Java (mais voir ci-dessous).
Pour certains algorithmes intensifs de calcul, une implémentation C bien écrite peut être plus rapide qu'une version Java correctement écrite.
Certaines opérations spécifiques au système d'exploitation ne peuvent pas être implémentées en langage Java pur.
Du côté con:
Il y a un plus grand frais généraux pour faire un appel JNI par rapport à un simple appel de méthode Java.
Si votre bibliothèque C n'est pas adaptée aux threads, vous devez être très prudent en l'appelant depuis Java. Et en règle générale, les bibliothèques C ne sont pas implémentées avec la sécurité des threads en tête.
Si votre bibliothèque C a des problèmes de gestion de la mémoire, elle peut déstabiliser la plate-forme Java et provoquer des plantages JVM. L'appel immédiat de bibliothèques natives signifie que votre application est plus difficile à mettre en communication et nécessite un processus de construction plus complexe.
Il y a un certain nombre de C to (Java) bytecode compilers, qui peut être en mesure de transformer votre code C dans un .jar de classes Java portables que vous pouvez appeler directement à partir de Java.
détriments contre JNI:
- Il y a une pénalité de performance notable, généralement au moins 100%.
avantages par rapport JNI:
- Tout comme en cours d'exécution du code Java pur, il est sûr, ne nécessite pas de privilèges spéciaux pour charger, et ne nécessite pas de recompiler pour chaque plate-forme cible.
(Quand je dis « JNI » Je veux dire vraiment toutes les interfaces Java en code natif. Par exemple, le même pour CNI.)
Un autre détriment par rapport à JNI est que vous ne serez pas capable de faire des choses spécifiques à la plateforme de cette façon ... et c'est (IMO) le cas d'utilisation le plus important pour les bibliothèques C. –
- 1. Appeler un module Python depuis Perl
- 2. Drupal: Comment appeler un modèle dans un module?
- 3. Importer un sous-module avec un objet module
- 4. Créer un module spécifique dans un projet multi-module
- 5. Comment nommez-vous une classe/un module/un module comme
- 6. Intégration de pygame à un module C
- 7. Python - Appeler dynamiquement une fonction dans un module
- 8. Comment organiser correctement un arbre de dépendance de module/module?
- 9. require() un module node.js?
- 10. validates_presence_of dans un module
- 11. Rendre un module global?
- 12. module d'email en java?
- 13. Module PAM Linux en Java
- 14. Module: référence à un autre module du desciptor
- 15. Exiger un fichier de module et interagir avec son module?
- 16. Python Modification des variables du module dans un autre module
- 17. Le module Flex n'est plus un module lorsqu'il est étendu?
- 18. Chargement d'un module dans un autre module dans Joomla
- 19. C opérateur # module
- 20. Supprimer un module de Sitefinity
- 21. décharger un module en Python
- 22. Drupal: Comment thématiser un module
- 23. Importer un module avec contexte
- 24. Comment fermer un module CVS
- 25. Profiler pour un module C++ dans une application C#
- 26. DDD "Module" en C# .NET
- 27. Modules Apache: module C vs module mod_wsgi python - Performance
- 28. Dans Erlang comment puis-je compiler un module depuis un module?
- 29. Comment changer un Zend Layout dans un module/contrôleur en layout stocké dans un autre module?
- 30. Initialiser un module mixte pour un modèle
Merci, je voulais juste essayer .. Maintenant qu'il y a tant de discussions sur l'interopérabilité :) – trinity