Java अन्य भाषाओं के साथ एकीकरण: JNI, GraalVM और IPC

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java का दूसरी भाषाओं से दोस्ती कराना: Python, C++ और JavaScript के साथ एकीकरण

\n

प्रोग्रामिंग की दुनिया किसी एक तकनीक का मठ नहीं है। भले ही आपका दिल Java की धड़कन पर झूमता हो, देर-सबेर ऐसा काम आ ही जाता है जो दूसरी भाषा में करना आसान (या एकमात्र संभव) होता है। C++ की लो-लेवल लाइब्रेरी का उपयोग करना हो, Python में मॉडल प्रोटोटाइप करना हो, या यूज़र मैक्रोज़ के लिए स्क्रिप्टिंग इंजन लगाना हो। क्या करें? सही जवाब — ब्रिज (पुल) बनाएं।

\n

इस लेख में हम Java को दूसरी भाषाओं से जोड़ने के असली और परखे हुए तरीकों पर चर्चा करेंगे। क्लासिक JNI से लेकर भविष्य के GraalVM और सरल लेकिन भरोसेमंद IPC तक। कोई बेकार की बात नहीं — सिर्फ कोड, बेंचमार्क और व्यावहारिक सुझाव। चलिए शुरू करते हैं!

\n\n

1. JNI (Java Native Interface) — एकीकरण का दादा

\n

JNI (Java Native Interface) एक मानक तंत्र है जो Java कोड को नेटिव एप्लिकेशन (आमतौर पर C/C++) कॉल करने और इसके विपरीत करने की अनुमति देता है। यह Java के शुरुआती वर्ज़न से मौजूद है और आज भी एकीकरण का सबसे तेज़ तरीका है, खासकर जब आपको हार्डवेयर, सिस्टम कॉल या पुरानी लाइब्रेरीज़ के साथ काम करना हो।

\n\n

यह कैसे काम करता है (संक्षेप में)

\n

आप Java में native कीवर्ड के साथ एक इंटरफ़ेस लिखते हैं, javac -h टूल से C हेडर जनरेट करते हैं, C में फंक्शन लागू करते हैं, इसे डायनामिक लाइब्रेरी (.so / .dll) में कंपाइल करते हैं और System.loadLibrary() के ज़रिए जोड़ते हैं।

\n\n

उदाहरण: Java से C फंक्शन कॉल करना

\n

मान लीजिए हमारे पास C में एक सुपरफास्ट फंक्शन है जो SHA-256 हैश निकालता है। हमें इसे Java से कॉल करना है।

\n\n

चरण 1. Java क्लास (HashBridge.java)

\n
public class HashBridge {\n    static {\n        System.loadLibrary("nativehash");\n    }\n\n    // नेटिव मेथड घोषित करें\n    public native String computeHash(String input);\n\n    public static void main(String[] args) {\n        HashBridge bridge = new HashBridge();\n        String result = bridge.computeHash("Hello from Java!");\n        System.out.println("Hash: " + result);\n    }\n}\n
\n\n

चरण 2. हेडर जनरेट करें

\n
javac -h . HashBridge.java\n
\n

इससे HashBridge.h फ़ाइल मिलती है जिसमें सिग्नेचर होता है।

\n\n

चरण 3. C में इम्प्लीमेंटेशन (nativehash.c)

\n
#include <jni.h>\n#include <string.h>\n#include <openssl/sha.h>\n\nJNIEXPORT jstring JNICALL Java_HashBridge_computeHash(JNIEnv *env, jobject obj, jstring input) {\n    const char *nativeString = (*env)->GetStringUTFChars(env, input, 0);\n    unsigned char hash[SHA256_DIGEST_LENGTH];\n    SHA256((unsigned char*)nativeString, strlen(nativeString), hash);\n\n    char hex[65];\n    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {\n        sprintf(hex + (i * 2), "%02x", hash[i]);\n    }\n    hex[64] = 0;\n\n    (*env)->ReleaseStringUTFChars(env, input, nativeString);\n    return (*env)->NewStringUTF(env, hex);\n}\n
\n\n

चरण 4. कंपाइल करें और चलाएं

\n
gcc -shared -o libnativehash.so -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux nativehash.c -lcrypto\njava HashBridge\n
\n\n

आउटपुट: Hash: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

\n\n

JNI के फायदे और नुकसान

\n
    \n
  • ✅ अधिकतम प्रदर्शन — बिना किसी ओवरहेड के नेटिव कोड को सीधा कॉल करना।
  • \n
  • ✅ सिस्टम API तक पहुंच — ड्राइवर, GPU, OS-विशिष्ट फंक्शन।
  • \n
  • ❌ डीबगिंग में कठिनाई — C में गलती JVM को बिना stacktrace के क्रैश कर सकती है।
  • \n
  • ❌ प्लेटफ़ॉर्म पर निर्भरता — हर OS/आर्किटेक्चर के लिए कंपाइल करना होता है।
  • \n
  • ❌ कोड का बोझ — C में JNI रैपर लिखना कोई मज़ेदार काम नहीं है।
  • \n
\n\n

2. GraalVM — बहुभाषी स्विस आर्मी चाकू

\n

ब्लॉग

पुस्तक अनुशंसाएँ