Fremdsprachen integrieren: So funktioniert das Java Native Interface

Native Methoden werden mit der Methode System.loadLibrary geladen. Im folgenden Beispiel lädt die Methode zur Klasseninitialisierung eine plattformspezifische native Bibliothek, in der die native Methode f definiert ist:


Das Argument für System.loadLibrary ist ein vom Programmierer beliebig gewählter Bibliotheksname. Das System geht nach einem standardmäßigen, plattformspezifischen Ansatz vor, um den Bibliotheksnamen in den Namen einer nativen Bibliothek zu konvertieren. So wandelt ein Solaris-System den Namen pkg_Cls beispielsweise in libpkg_Cls.so um, während ein Win32-System denselben Namen in pkg_Cls.dll umformt.

Dynamische Binder lösen Einträge nach ihren Namen auf. Der Name einer nativen Methode wird dabei aus einzelnen Komponenten zusammengesetzt: dem Präfix Java_, einem verkürzten, vollständig qualifizierten Klassennamen sowie einem verkürzten Methodennamen.

Anmerkung: Microsofts JVM-Implementierung verfügt über einen ähnlichen Mechanismus zum Aufruf von nativem Windows-Code über Java, das so genannte Raw Native Interface (RNI).

Zuordnung von Datentypen

Grundtypen wie Integer, Character und andere werden einfach zwischen Java und dem nativen Code kopiert. Sonstige Java-Objekte werden hingegen per Referenz übergeben.

Folgende Tabelle zeigt die Zuordnung von Datentypen zwischen Java und nativem Code. Diese Typen sind austauschbar. Man kann also jint anstatt int verwenden und umgekehrt, ohne dass dazu eine Typumwandlung erforderlich wäre.

Screenshot

Allerdings funktioniert die Zuordnung zwischen Java-Strings und
-Arrays und nativen Strings und Arrays anders. Falls man einen jstring verwendet, wo eigentlich ein char * erwartet wird, kann der Code die JVM zum Absturz bringen. Hier ein Beispiel, wie man korrekt mit Strings arbeitet:


Java-Objekte verarbeitet man immer mit dem Interface-Zeiger env.

Fazit

Es ist nicht besonders leicht, das JNI in einer eigenen Anwendung zu implementieren. Allerdings sprechen dessen Performance, die Fähigkeit zur Weiterverwendung von vorhandenem Code und die Möglichkeit, seine Java-Anwendung um zusätzliche Funktionen zu erweitern, durchaus dafür, sich dieser Herausforderung zu stellen. Weitere Informationen sind auf der JNI-Homepage zu finden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Fremdsprachen integrieren: So funktioniert das Java Native Interface

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *