سؤال

لقد كنت مطورًا لجافا منذ عامين وسمعت أنه يمكنك القيام ببعض الأشياء المفيدة والقوية باستخدام JNI.لا أعرف إذا لم أكن بحاجة إلى استخدامه أو إذا لم يكن ذا صلة كبيرة بالنسبة لي؛لكن لم أضطر للمسها على الإطلاق.

وأتساءل ما فائدة هذا الجانب من جافا.الأمثلة ستكون رائعة.

هل كانت مفيدة؟

المحلول

مفيد جدا.أستطيع أن أرى سببين رئيسيين لاستخدام JNI (من المحتمل أن يكون هناك المزيد).

  1. أداء.إذا كان لديك جزء من التعليمات البرمجية حيث لا يستطيع Java Runtime لأي سبب من الأسباب تقليل الأداء.يمكنك تنفيذ هذه الوظيفة في التعليمات البرمجية الأصلية واستدعائها من Java.هذا يسمح لك بضبط التنفيذ إذا كنت حقًا بحاجة ل.من المحتمل أن يكون هذا هو السبب الأقل شيوعًا، على الرغم من أن أداء Java عادةً ما يكون جيدًا.

  2. الوصول إلى واجهات برمجة التطبيقات الخاصة بنظام التشغيل.هذا واحد كبير.لقد واجهت حالة حيث كنت بحاجة إلى القيام بشيء ما في Java ولكنني كنت بحاجة أيضًا إلى الوصول إلى شيء لا تستطيع Java توفيره.في حالتي كان مآخذ مجال UNIX.وبما أنها (كما يمكنك أن تعرف من اسمها) فهي خاصة بنظام UNIX، فلا توجد طريقة Java قياسية لاستخدامها.لذلك قمت بإنشاء فصل دراسي يعمل كغلاف حولهم في لغة C وتم الوصول إليه باستخدام JNI.فيولا، تم حل المشكلة.

نصائح أخرى

وكنت قد كتبت طبقة واسعة JNI لالأجهزة الخادمة iSeries للوصول DB2، طوابير المستخدم، طوابير البيانات وعدد قليل من OS / 400 تفاصيل. أن كثيرا من نظامنا على الأجهزة الخادمة iSeries كان من المستحيل دون JNI. لذلك، نعم، JNI لها مكانها، وعندما كنت في حاجة إليها، وكنت <م> حقا في حاجة إليها.

وانها صعبة نسبيا (بجانب جافا النقي)، ولكنها قوية وليس الرهيبة.

وأيضا، كلما أنا أبحث في بعض رمز JNI، وأنا أيضا النظر في استخدام JNA .

يمكنني التفكير في بعض الاستخدامات من أعلى رأسي:

  1. التكامل مع واجهات برمجة التطبيقات الموجودة منخفضة المستوى (C/C ++) التي لا تحتوي على نظير Java
  2. تتكامل مع جوانب النظام غير المكشوفة من خلال واجهات برمجة تطبيقات Java المتاحة (الوصول المباشر للأجهزة ، وما إلى ذلك)

قد يقول البعض أنه يمكن أن يكون مفيدًا لإنشاء أقسام محسّنة للغاية من التعليمات البرمجية، ولكن مع JVMs الحديثة، تصبح الأمور سريعة جدًا ومن المحتمل أن تفوق تعقيدات استخدام JNI أي فائدة أداء قد تراها.

وهناك عدد قليل من الاستخدامات للربط إلى FFMPEG لC-فك (لعنة بالقرب من أي) الفيديو / تنسيق الصوت.

وهناك أيضا JNA، الأمر الذي يجعل من مثل الذي تستخدمه المكتبة نفسها. هذا هو "الأسهل" من وجهة نظر أن يمر كل شيء للمطور جافا لإدارة وأصعب، بمعنى أن لديك لمعرفة تعيين هيكل والقيام بالكثير من العمل الناخر للحصول على كل المؤشرات وغيرها، لتمرير بشكل صحيح.

وكان لدينا شرط التفاف واجهة مستخدم جديدة حول تركة التطبيق C يعمل على سوزي لينكس. كان JNI الأداة المثالية لهذا المنصب.

في عام أعتقد JNI هو يتعارض مع فكرة جافا من الكتابة مرة واحدة، تشغيل في أي مكان. ولكن هناك حالات الاستخدام حيث يمكن أن يكون مفيدا JNI.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top