जावा में बाइट एरे को हेक्साडेसिमल स्ट्रिंग में बदलना एक सामान्य कार्य है, जो अक्सर डिबगिंग, लॉगिंग या डेटा ट्रांसमिशन के लिए आवश्यक होता है। यह लेख इस रूपांतरण को पूरा करने के कई कुशल तरीकों का पता लगाता है, उनके प्रदर्शन और उपयोग में आसानी की तुलना करता है।
विषयवस्तु की तालिका
- HEX_ARRAY के साथ मैनुअल रूपांतरण
- Apache Commons Codec का उपयोग करना
- DatatypeConverter का लाभ उठाना
- स्ट्रिंग स्वरूपण दृष्टिकोण
- प्रदर्शन तुलना
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
एक उत्कृष्ट विकल्प है।