2009-05-27 9 views
1

Est-il possible d'appeler le code natif intégré de la JVM, c'est-à-dire le code que diverses classes de java.lang et java.io appellent? En d'autres termes, pouvez-vous ignorer l'API Java intégrée pour accéder à divers appels au niveau du système, tels que l'accès au système de fichiers? Je sais que je pourrais le faire en construisant ma propre bibliothèque de code natif et en l'appelant via JNI, mais il serait élégant de ne pas avoir besoin d'une bibliothèque native supplémentaire pour les fonctionnalités déjà intégrées dans la JVM.Appel de méthodes natives Java intégrées

+0

Vous pouvez mais vous ne devriez pas avoir besoin de. Que vis-tu en les contournant? –

Répondre

6

Non, vous ne pouvez pas. C'est conçu de cette façon exprès; vous auriez outrepassé les contrats API si vous le pouviez. Dans tous les cas, le code d'encapsulation de la bibliothèque standard est très et avec les compilateurs JIT, vous ne devriez pas remarquer d'impact de vitesse.

En outre, l'implémentation de ces méthodes ne fait pas partie de la spécification API. Ce qui est "natif" pour une implémentation de Java n'a pas à être pour un autre.

+0

Merci pour la clarification. Je ne suis pas vraiment motivé par la vitesse, la plus grande motivation ici est d'abstraire certaines fonctionnalités de base d'une manière plus uniforme que celle fournie par l'API java par défaut. Sun semble avoir conscience de certaines de ces faiblesses, d'où les itérations confuses de java.io à java.nio en java.nio2. – toluju

+0

Vous pariez! Votre critique de l'API de Java est assez juste! Je suggère de définir votre propre API et d'utiliser la bibliothèque standard dans les coulisses. Il suffit de protéger votre code contre les horreurs; le reste (comportement de la plateforme, vitesse) ne sera pas un problème. –

-1

Si vous souhaitez utiliser les E/S natives, utilisez les classes NIO.

+3

A ma connaissance les classes NIO se réfèrent à "New IO", pas "Native IO". Ils sont toujours des wrappers Java autour de l'implémentation native sous-jacente. – toluju

0

Vous pouvez, bien sûr, utiliser la réflexion pour appeler les méthodes pour lesquelles le code est fiable. Cependant, les API non publiques sont susceptibles de changer entre les mises à jour et les implémentations, ce qui est plutôt inutile et absolument non élégant.

Questions connexes