SORU
12 EKİM 2009, PAZARTESİ


Yerel kod çağırmak için JNA yerine JNI kullanmak?

JNA adil bir bit yerel kod JNI göre aramak için kullanımı daha kolay gibi görünüyor. Ne durumda JNA üzerinde JNI kullanır mıydın?

CEVAP
12 EKİM 2009, PAZARTESİ


  1. JNA c sınıfları eşleme desteklemiyor, eğer c kitaplığı kullanıyorsanız jnı sarıcı gerekir
  2. Eğer bellek kopyalama ihtiyacınız varsa. Örneğin, büyük bir bayt arabellek döndüren bir yöntem çağrısı, içinde bir şey değiştirmek, o zaman bu bayt arabellek kullanan başka bir yöntem aramak gerekir. Bu java için c, bu tampon kopyalama, kopyalama java ya da c için o zaman gerektirecektir. Bu durumda jnı ve c bu tampon, kopyalamadan tutun değiştirebilirsiniz çünkü performans kazanacak.

Bu karşılaştığım sorunları vardır. Belki daha fazlası var. Ama genel olarak performans jna ve jnı arasında farklı değildir, JNA kullanabileceğiniz her yerde kullanabilirsiniz.

EDİT

Bu cevap oldukça popüler gibi görünüyor. Burada bazı eklemeler:

  1. Eğer göster C veya COM gerekiyorsa, Oliver Chafic, JNAerator yaratıcısı, BridJ adında bir kütüphane var. Hala genç bir kütüphane, ama çok ilginç özellikleri vardır:
    • Dinamik C / C / COM birlikte çalışabilirlik : C yöntemlerini çağırmak, C nesneleri (Java ve C sınıfları ...
    • Basit tip jenerik iyi kullanın (İşaretçiler için çok güzel modeli de dahil olmak üzere) ile eşleştirmeleri
    • JNAerator tam destek
    • Windows, Linux üzerinde çalışır, MacOS X, Solaris, Android
  2. Bellek kopyalama gibi JNA doğrudan ByteBuffers destekler inanıyorum, bellek kopyalama önlenebilir.

Yani, ben hala inanıyorum bu mümkün, bunu iyi kullanmak JNA veya BridJ, ve geri dönmek için jnı eğer performans açısından oldukça önemlidir, çünkü eğer araman gerek yerel fonksiyonları sık sık, performans isabet olduğunu fark.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008