Жаңа тілдермен интеграция: Java Native Interface (JNI)
Java Native Interface
Java Native Interface (JNI): Java кодына C, C++ тілдерінде жазылған бағдарламалармен байланыстыруға мүмкіндік береді. Платформаға қатысты мүмкіндіктерді қосады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Шеткі функциялар интерфейсі
Foreign function interface
Бағдарламалық жасақтауда, Java Native Interface (JNI) – Java виртуалды машинасының (JVM) ішінде орындалатын Java кодын, нақты қолданбалар (нақты аппараттық және операциялық жүйе платформасына арналған бағдарламалар) және C, C++ және ассемблер сияқты басқа тілдерде жазылған кітапханалар шақыруға және оларға шақырылуға мүмкіндік беретін шеткі функциялар интерфейсі бағдарламалау аясы.
In software design, the Java Native Interface (JNI) is a foreign function interface programming framework that enables Java code running in a Java virtual machine (JVM) to call and be called by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages such as C, C++ and assembly.
Мақсаттар
JNI бағдарламашыларға Java бағдарламалау тілінде толық жазылуы мүмкін емес жағдайларды шешу үшін жергілікті әдістерді жазуға мүмкіндік береді, мысалы, стандартты Java сыныптар кітапханасы платформаға тән мүмкіндіктерді немесе бағдарламалық кітапхананы қолдамайтын жағдайларда. Ол сондай-ақ Java бағдарламаларына қолжетімді болу үшін басқа бағдарламалау тілінде жазылған қолданбаны өзгертуге де пайдаланылады. Стандартты кітапхана кластарының көпшілігі JNI-ге сүйенеді, бұл әзірлеушіге және пайдаланушыға функционалдық мүмкіндіктерді ұсынады, мысалы, файлдық I/O және дыбыс мүмкіндіктері. Стандартты кітапханаға өнімділік пен платформаға бейімделген API-ларды қосу, барлық Java қолданбаларына осы функционалдыққа қауіпсіз және платформадан тәуелсіз түрде қол жеткізуге мүмкіндік береді. JNI фреймворкі жергілікті әдіске Java кодтары осы нысандарды пайдаланатын тәсілмен Java нысандарын пайдалануға рұқсат береді. Жергілікті әдіс Java нысандарын жасай алады, содан кейін оларды тексеріп, өз міндеттерін орындау үшін пайдалана алады. Сондай-ақ, жергілікті әдіс Java қолданбасы кодымен жасалған нысандарды да тексеріп, пайдалана алады. JNI-ді тек қолданбалар мен қол қойылған апплеттер ғана шақыра алады. JNI-ге сүйенетін қолданба Java ұсынатын платформалық тасымалданатын мүмкіндіктерін жоғалтады (жартылай шешім – әрбір платформа үшін JNI кодының жеке нұсқасын жазып, Java операциялық жүйені анықтап, орындалу кезінде дұрыс нұсқаны жүктеу). Жергілікті код Java-мен интерфейс қана емес, сонымен қатар Java-ға негізделуі мүмкін, бұл Java AWT Native Interface арқылы мүмкін. Процесс шамалы өзгерістермен бірдей. Java AWT Native Interface тек J2SE 1.3 нұсқасынан бастап қолжетімді. JNI сонымен қатар C көпірінен өтпей, тікелей құрастыру кодына қол жеткізуге мүмкіндік береді. Java қолданбаларына құрастыру тілі арқылы қол жеткізу де осылай мүмкін.
JNI enables programmers to write native methods to handle situations when an application cannot be written entirely in the Java programming language, e. g. when the standard Java class library does not support the platform specific features or program library. It is also used to modify an existing application (written in another programming language) to be accessible to Java applications. Many of the standard library classes depend on JNI to provide functionality to the developer and the user, e. g. file I/O and sound capabilities. Including performance and platform sensitive API implementations in the standard library allows all Java applications to access this functionality in a safe and platform independent manner. The JNI framework lets a native method use Java objects in the same way that Java code uses these objects. A native method can create Java objects and then inspect and use these objects to perform its tasks. A native method can also inspect and use objects created by Java application code. Only applications and signed applets can invoke JNI. An application that relies on JNI loses the platform portability Java offers (a partial workaround is to write a separate implementation of JNI code for each platform and have Java detect the operating system and load the correct one at runtime). Not only can native code interface with Java, it can also draw on a Java , which is possible with the Java AWT Native Interface. The process is almost the same, with just a few changes. The Java AWT Native Interface is only available since J2SE 1.3. JNI also allows direct access to assembly code, without even going through a C bridge. Accessing Java applications from assembly is possible in the same way.
Баламалар
Microsoft-тың Java Virtual Machine (Visual J++) бағдарламасының жеке меншік іске асырылуы Java-дан жергілікті кодты шақырудың ұқсас механизміне ие болды, оны Raw Native Interface (RNI) деп атады. Сонымен қатар, ол Java-ны білмейтін, мысалы, Windows API сияқты, бар жергілікті кодты шақырудың оңай тәсілі болды, бұл J/Direct деп аталды. Бірақ Sun–Microsoft арасындағы осы іске асыру бойынша сот процесінен кейін Visual J++ енді қолдау көрсетілмейді. RNI-ді JNI-ге қарағанда пайдалану ыңғайлырақ болды, себебі Java ортасының мекенжайымен есептесудің қажеті болмады. Оның орнына, барлық Java нысандарына тікелей қол жеткізуге болады. Бұл үшін Java сыныптарынан қанағаттар файлдарды (header files) жасайтын құрал қолданылды. Сол сияқты, J/Direct қажетті аралық жергілікті кітапхананы және JNI-ді пайдаланудан гөрі оңайырақ болды. Java Native Access (JNA) – Java бағдарламашыларына JNI-ді пайдаланбай-ақ, ортақ кітапханаларға оңай қол жеткізуді қамтамасыз ететін, қауымдық дамытумен жасалған кітапхана. Дегенмен, бұл тәуелді jar кітапханасын қайта таратуды қажет етеді. Таңдау JNI-ді кодтаудың қиындығы мен JNA-ның баяу болуы арасында. JNI Java-ның негізгі бөлігіне кіріктірілген.
Microsoft's proprietary implementation of a Java Virtual Machine (Visual J++) had a similar mechanism for calling native code from Java, called the Raw Native Interface (RNI). In addition, it had an easy way to call existing native code that was not itself aware of Java, such as (but not limited to) the Windows API, called J/Direct. However, following the Sun–Microsoft litigation about this implementation, Visual J++ is no longer maintained. RNI was less clumsy to use than JNI, because no bookkeeping with a Java environment pointer was needed. Instead, all Java objects could be accessed directly. To facilitate this, a tool was used that generated header files from Java classes. Similarly, J/Direct was easier to use than using the necessary intermediate native library and JNI. Java Native Access (JNA) is a community developed library that provides Java programers easy access to native shared libraries without using JNI. However, this requires the redistribution of the dependent jar library. The tradeoff is between JNI being harder to code and JNA being slower. JNI is built in to core Java.