Un module java peut-il appeler un module ac?

Juste par intérêt, est-il possible d’appeler un module C à partir d’un module java? Si oui, comment faire ça?

oui, vous pouvez utiliser Java Native Interface pour ce faire:

Oui tu peux le faire. Si vous devriez le faire est une autre affaire.

Du côté des pros:

  • L’appel de bibliothèques C à partir de Java évite d’avoir à recoder les bibliothèques en Java (voir toutefois ci-dessous).

  • Pour certains algorithmes gourmands en calculs, une implémentation en C bien écrite peut être plus rapide qu’une version Java bien écrite.

  • Certaines opérations spécifiques au système d’exploitation ne peuvent pas être implémentées en Java pur.

Du côté des arnaques:

  • La création d’un appel JNI entraîne une surcharge de temps par rapport à un simple appel de méthode Java.

  • Si votre bibliothèque C n’est pas thread-safe, vous devez l’appeler avec précaution depuis Java. Et en règle générale, les bibliothèques C ne sont pas implémentées dans le souci de la sécurité des threads.

  • Si votre bibliothèque C a des problèmes de gestion de la mémoire, cela peut déstabiliser la plate-forme Java et provoquer des pannes de la machine virtuelle Java.

  • L’appel immédiat de bibliothèques natives signifie que votre application est plus difficile à porter et nécessite un processus de construction plus complexe.

Oui, vous appelez C / C ++ à partir de Java en utilisant l’interface JNI (Java Native Interface) à cet effet.

  • Interface native Java: Guide du programmeur et spécifications

Vous pouvez également utiliser SWIG à cette fin:

  • Tutoriel SWIG

Regardez dans JNI (Java Native Interface).

Oui. Comme d’autres l’ont déjà mentionné, JNI ou Java Native Interface est le moyen privilégié par Sun pour ce faire. Si vous estimez avoir besoin d’appeler le code C depuis d’autres langages ainsi qu’avec Java, je regarderais dans SWIG , qui générera de manière transparente le code JNI pour vous, mais vous permettra également de faire des choses similaires avec, par exemple, Python.

Il existe un certain nombre de compilateurs de bytecode C à (Java) , qui peuvent éventuellement transformer votre code C en un fichier .jar de classes Java portables que vous pouvez appeler directement à partir de Java.

Inconvénients contre JNI:

  • Il y a une pénalité de performance notable, généralement au moins 100%.

Avantages par rapport à JNI:

  • Tout comme exécuter du code Java pur, il est sûr, ne nécessite pas de privilèges spéciaux à charger et ne nécessite pas de recompilation pour chaque plate-forme cible.

(Quand je dis ” JNI “, je parle en réalité de toutes les interfaces Java en code natif. Par exemple, il en va de même pour CNI .)