Java Yöntem Bildirimi– Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
JNI Uygulama Örneği
Örnekle öğrenmek, öğrenmenin en etkili yoludur, bu yüzden önceki bölümde sunulan OSMemoryInfo sınıfıyla çalışalım. Sınıfın, işletim sisteminden bellek bilgilerini almak için JNI kullanmak üzere tasarlandığını hatırlayın.
Fiziksel ve sanal belleğin toplam ve kullanılabilir miktarını döndüren dört yerel yöntemi vardır. Tüm yöntemler, Listeleme’de gösterilen sözdizimine sahiptir ve tüm sınıf kaynağı CovertJava/src/covertjava/nativecode/OSMemoryInfo.java’da bulunabilir.
Java yerel yöntemlerine karşılık gelen C işlevleri için doğru sözdizimini bulmanın en kolay yolu javah yardımcı programını kullanmaktır. javah, sağlanan Java sınıfı dosyasına dayalı olarak bir C başlık dosyası oluşturur. Java sınıfında bulunan her yerel yöntem için javah, çıktı C başlık dosyasında bir işlev imzası oluşturur.
javah’ı covertjava.bytecode üzerinde çalıştırmak. OSMemoryInfo sınıfı, CovertJava/src/covertjava/nativecode dizininde de bulunabilen covertjava_nativecode_OSMemoryInfo.h adlı bir dosya üretir. İşlev bildirimlerini ve Java veri türlerinin C türleriyle nasıl eşlendiğini incelemek için biraz zaman ayırın.
Bir sonraki adım, covertjava_ nativecode_OSMemoryInfo.h içinde açıklanan dört işlevin gövdelerini kodlamaktır. Örneği kısa tutmak için yalnızca Windows uygulamasına bakacağız çünkü Unix uygulaması yalnızca işletim sistemine yapılan işlev çağrısında farklılık gösterir.
Dört işlevin tümü, işletim sistemi belleği hakkında çok sayıda bilgi döndüren aynı Win32 API işlevini (GlobalMemoryStatusEx) kullanır. İşlev gövdeleri, dizininde bulunabilen kodlanmıştır.
Burada karmaşık bir şey yok; yalnızca bir Win32 işlevinin çağrılması, hata kontrolü ve sonucun döndürülmesi. Java ideolojisinin ruhuna uygun olarak, oluşturduğumuz C işlevi, Win32 API çağrısı başarısız olursa bir java.lang.Exception atar.
Kodlanan işlev gövdeleri ile bir Windows Dynamically Linked Library (DLL) oluşturabiliriz. Windows SDK ve .Net SDK’yı indirdiğinizde aslında ücretsiz olarak gönderilen MSVC derleyicisini kullanacağım. DLL’yi oluşturan makefile CovertJava/build dizininde bulunabilir ve CovertJava/bin/build_native.bat toplu iş dosyası nmake.exe’yi çalıştırmak için kullanılabilir.
İstediğiniz derleyiciyi ve oluşturma yöntemini seçmekte özgürsünüz, ancak daha sonra açıklanacak nedenlerden dolayı Microsoft derleyicisini kullanmanızı tavsiye ederim. Yerel kitaplıkları yeniden oluşturmak istiyorsanız build_native.bat içindeki tüm yolları güncellediğinizden emin olun.
Artık yerel yöntemlerden alınan değerleri veren OSMemoryInfo sınıfının main() yöntemini çalıştırabiliriz. main() yöntemini çağıran CovertJava/bin/OsMemoryInfo.bat dosyasını çalıştırmak, makinemde aşağıdaki çıktıyı üretti.
Yerel Yöntemlere Genel Yaklaşımlar
Java kodunun yerel kodla ve JNI mimarisiyle nasıl etkileşime girdiğinin temel ilkesini bildiğimize göre, artık yerel işlevleri geçersiz kılma yöntemlerine bakabiliriz. Tıpkı bayt kodu düzeltme ekinde olduğu gibi, amaç bir yerel yöntem çağrısına müdahale etmek ve onu kendi uygulamamızı sağlamaktır. Düzeltme eki, arayan için saydam olmalı ve Java istemci kodunda herhangi bir değişiklik gerektirmemelidir. Her biri kendi artıları ve eksileri olan üç yaklaşımı inceleyelim.
Java Ders Notları PDF
Java nesne Yönelimli programlama örnekleri
java’nın nesneye yönelik özellikleri
Java ile PROGRAMLAMAYA Giriş – PDF
Java nesne Tabanlı PROGRAMLAMA Ders Notları
java’da sınıfların başlangıç ve bitişleri
java’da veri ile çalışmak için kullanılan sınıflar
Java PDF Türkçe
Java Yöntem Bildirimi
En kolay çözüm, yöntemi bildiren Java sınıfını yamalamak, yerel anahtar sözcüğü kaldırmak ve onu bir Java uygulamasıyla değiştirmektir. Uygulama, gerçek yöntem mantığını sağlayan bir yardımcı sınıfa yetki verebilir. Basit olmasına rağmen, bu yöntem en etkili olanıdır ve ilk tercihiniz olmalıdır. Tüm değişiklikler Java düzeyinde yapıldığından, C programlama ve ikili dosya manipülasyonlarına dalmanıza gerek yoktur.
Bu yaklaşımın bir komplikasyonu, aslında yerel bir arama yapmak istediğiniz ancak bunun mantığının bir kısmını değiştirmeniz gereken bir durumdur. Yöneticiler yerine Kullanıcılar grubunda oluşturulan işletim sistemi kullanıcısına sahip olmak için yeni bir gereksiniminiz olduğunu varsayalım. Burada işletim sistemi ile etkileşime giren yerel bir yöntemi çağırmaktan kaçınmazsınız.
Ancak bu durumda bile orijinal Java yöntemini yerel olmayan bir yöntem olarak yamalayabilir ve ardından yerel bir yöntemi çağırmasını sağlayabilirsiniz. Yerel yöntem daha sonra, işletim sistemi düzeyinde bir kullanıcı oluşturan alternatif bir adla özel bir yerel kitaplıkta uygulanır. Bildirim düzeltme ekinin kullanılamadığı tek zaman, bir lisans sözleşmesinin Java sınıflarının tersine mühendisliğini yasakladığı ancak yerel kitaplıkların değişikliklerini kısıtlamadığı zamandır.
İkinci yaklaşım, orijinal yerel kitaplığı, orijinal kitaplık tarafından dışa aktarılan işlevlerin aynısını dışa aktaran bir ikame ile değiştirmektir. Yedek işlevler, alternatif bir uygulama gerekmedikçe orijinal işlevlere yetki verir.
Yedek kitaplık, orijinal kitaplık için akıllı bir proxy gibi davranır, ön işleme, son işleme ve yöntem çağrılarını tamamen geçersiz kılma yeteneğine sahiptir. Bu yaklaşım, kitaplığın birkaç işlevi varsa veya kitaplık tarafından dışa aktarılan yöntemlerin çoğu için düzeltme eki gerekiyorsa iyi çalışır.
Tüm işler C’de yapılabildiğinden, bu, Java sınıflarında veya ikili makine kodunda herhangi bir değişiklik gerektirmeyen nispeten basit bir yaklaşımdır. Dışa aktarılan işlevlerin sayısı yüksekse, yedek kitaplığı kodlamak yorucu olabilir.
Tıpkı Java yöntemi bildiriminde olduğu gibi, mantığın bir kısmını orijinal yerel yöntemden korumaya çalışırken olası bir sorun ortaya çıkabilir. Bu hemen hemen bir ya hep ya hiç yaklaşımıdır – ya orijinal yönteme yetki verirsiniz ya da vermezsiniz.
Üzerinde düşündüğümüz sorulardan birini hatırlıyor musunuz, “Çekirdek Java Sınıflarını Değiştirme ve Yama Yapma”? “Her yolu deneyip başarısız olduğumuzda ne yaparız?” Bunun internette alıntılanmasını beklemiyorum, ama bir bakıma bu kitabın konusu budur. Önceki iki yaklaşım, yerel kod düzeltme ekine temiz ve nispeten basit çözümler sağlar, ancak “toplam kontrol” vaadini yerine getirmezler.
Tam kontrole sahip olmak için, yerel kitaplıkları hackleyebilmeli ve bytecode ile yaptığımıza benzer şekilde kodu yamalayabilmeliyiz. Üçüncü yaklaşım tam olarak şunu yapar: Kitaplığın ikili biçimini keşfetmeye, değiştirilecek makine kodunu bulmaya ve onu yeni mantıkla yamalamaya dayanır. Bu kolay bir yol değil, bu yüzden bunu denemeden önce ilk iki yaklaşımı kullanmanızı tavsiye ediyoruz.
Yerel koda yama uygulama, platforma özeldir ve yürütülebilir dosya formatının kapsamlı bir şekilde anlaşılmasını ve birleştirme dili ve işlemci adresleme bilgisini gerektirir. Ama getirisi de harikadır. Burada inceleyeceğimiz teknik, yalnızca JNI kitaplıklarında değil, herhangi bir yürütülebilir dosyada kullanılabilir. Ayrıca yürütülebilir dosya biçimleri ve işletim sisteminin programları nasıl yüklediği ve çalıştırdığı hakkında fikir verir.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)