Java Programming

Java में कुशल बाइट सरणी से हेक्स स्ट्रिंग रूपांतरण

Spread the love

जावा में बाइट एरे को हेक्साडेसिमल स्ट्रिंग में बदलना एक सामान्य कार्य है, जो अक्सर डिबगिंग, लॉगिंग या डेटा ट्रांसमिशन के लिए आवश्यक होता है। यह लेख इस रूपांतरण को पूरा करने के कई कुशल तरीकों का पता लगाता है, उनके प्रदर्शन और उपयोग में आसानी की तुलना करता है।

विषयवस्तु की तालिका

HEX_ARRAY के साथ मैनुअल रूपांतरण

यह विधि बाइट मानों को उनके हेक्साडेसिमल निरूपणों में मैप करने के लिए एक पूर्वनिर्धारित वर्ण सरणी का उपयोग करती है। यह छोटे बाइट एरे के लिए अच्छा प्रदर्शन प्रदान करता है और बाहरी निर्भरताओं से बचाता है।


public class ByteArrayToHex {

    private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();

    public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j >> 4];
            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
        }
        return new String(hexChars);
    }

    public static void main(String[] args) {
        byte[] byteArray = { (byte) 0xA1, (byte) 0xB2, (byte) 0xC3, (byte) 0xD4 };
        String hexString = bytesToHex(byteArray);
        System.out.println("हेक्सा स्ट्रिंग: " + hexString); // Output: हेक्सा स्ट्रिंग: A1B2C3D4
    }
}

Apache Commons Codec का उपयोग करना

Apache Commons Codec लाइब्रेरी सुविधाजनक Hex.encodeHexString() विधि प्रदान करती है। यह एक मजबूत और व्यापक रूप से उपयोग किया जाने वाला समाधान है, लेकिन आपके प्रोजेक्ट में एक निर्भरता जोड़ने की आवश्यकता है (जैसे, Maven का उपयोग करके)।


import org.apache.commons.codec.binary.Hex;

public class ByteArrayToHexApache {
    public static void main(String[] args) {
        byte[] byteArray = { (byte) 0xA1, (byte) 0xB2, (byte) 0xC3, (byte) 0xD4 };
        String hexString = Hex.encodeHexString(byteArray);
        System.out.println("हेक्सा स्ट्रिंग: " + hexString); // Output: हेक्सा स्ट्रिंग: A1B2C3D4
    }
}

DatatypeConverter का लाभ उठाना

जावा का अंतर्निहित javax.xml.bind.DatatypeConverter वर्ग (जावा 6 से उपलब्ध) printHexBinary() विधि प्रदान करता है। यह एक सरल, निर्भरता-मुक्त विकल्प है।


import javax.xml.bind.DatatypeConverter;

public class ByteArrayToHexDatatypeConverter {
    public static void main(String[] args) {
        byte[] byteArray = { (byte) 0xA1, (byte) 0xB2, (byte) 0xC3, (byte) 0xD4 };
        String hexString = DatatypeConverter.printHexBinary(byteArray);
        System.out.println("हेक्सा स्ट्रिंग: " + hexString); // Output: हेक्सा स्ट्रिंग: A1B2C3D4
    }
}

स्ट्रिंग स्वरूपण दृष्टिकोण

यह विधि एक लूप के भीतर String.format() का उपयोग करती है। कार्यशील होने पर, यह आम तौर पर अन्य विधियों की तुलना में कम कुशल है, खासकर बड़े बाइट एरे के लिए, बार-बार स्ट्रिंग संयोजन के ओवरहेड के कारण।


public class ByteArrayToHexAppendFormat {
    public static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X", b));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        byte[] byteArray = { (byte) 0xA1, (byte) 0xB2, (byte) 0xC3, (byte) 0xD4 };
        String hexString = bytesToHex(byteArray);
        System.out.println("हेक्सा स्ट्रिंग: " + hexString); // Output: हेक्सा स्ट्रिंग: A1B2C3D4
    }
}

प्रदर्शन तुलना

छोटे बाइट एरे के लिए, इन विधियों के बीच प्रदर्शन में अंतर नगण्य है। हालांकि, बड़े एरे के लिए, मैनुअल HEX_ARRAY विधि और Apache Commons Codec आम तौर पर String.format() दृष्टिकोण से बेहतर प्रदर्शन करते हैं। DatatypeConverter बाहरी निर्भरताओं के बिना प्रदर्शन और उपयोग में आसानी का एक अच्छा संतुलन प्रदान करता है।

सर्वोत्तम विकल्प आपकी परियोजना की विशिष्ट आवश्यकताओं पर निर्भर करता है। यदि प्रदर्शन महत्वपूर्ण है और आप बड़े डेटासेट के साथ काम कर रहे हैं, तो HEX_ARRAY विधि या Apache Commons Codec अनुशंसित हैं। यदि सादगी और बाहरी निर्भरताओं से बचने को प्राथमिकता दी जाती है, तो DatatypeConverter एक उत्कृष्ट विकल्प है।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *