2012-03-14 8 views
39

मैंने स्ट्रिंग के लिए जावा के आंतरिक प्रतिनिधित्व की खोज की, लेकिन मुझे दो सामग्री मिल गईं जो विश्वसनीय लेकिन असंगत दिखती हैं।स्ट्रिंग के लिए जावा का आंतरिक प्रतिनिधित्व क्या है? संशोधित यूटीएफ -8? UTF-16?

एक है:

http://www.codeguru.com/cpp/misc/misc/multi-lingualsupport/article.php/c10451

और यह कहते हैं:

जावा UTF-16 के आंतरिक पाठ प्रतिनिधित्व के लिए उपयोग करता है और UTF- के एक गैर मानक संशोधन का समर्थन करता है स्ट्रिंग क्रमबद्धता के लिए 8।

अन्य है:

http://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8

और यह कहते हैं:

Tcl भी आंतरिक प्रतिनिधित्व के लिए एक ही संशोधित UTF-8 [25] के रूप में उपयोग करता जावा यूनिकोड डेटा का, लेकिन बाहरी डेटा के लिए सख्त सीईएसयू -8 का उपयोग करता है।

संशोधित यूटीएफ -8? या यूटीएफ -16? कौनसा सही है? और स्मृति में चार के लिए जावा कितने बाइट्स का उपयोग करता है?

कृपया मुझे बताएं कि कौन सा सही है और यह कितने बाइट्स का उपयोग करता है।

+0

http://stackoverflow.com/questions/4655250/difference-between-utf-8-and-utf-16, यह आपके प्रश्न का उत्तर दे सकता है। –

+0

जावा क्या उपयोग करता है और जेएमवी मेमोरी में क्या उपयोग करता है, वही नहीं होना चाहिए। मेरा जवाब देखें –

+1

जावा के बारे में (आधिकारिक) जानकारी का आपका मुख्य स्रोत http://java.sun.com होना चाहिए! (_ stesoverflow_ के बावजूद) –

उत्तर

50

जावा आंतरिक पाठ प्रतिनिधित्व के लिए UTF-16 का उपयोग करता है

स्ट्रिंग और StringBuilder आदि जावा में के लिए प्रतिनिधित्व है UTF-16

http://java.sun.com/javase/technologies/core/basic/intl/faq.jsp

कैसे पाठ का प्रतिनिधित्व करती है जावा मंच में?

जावा प्रोग्रामिंग भाषा यूनिकोड चरित्र सेट पर आधारित है, और कई पुस्तकालय यूनिकोड मानक को लागू करते हैं। जावा प्रोग्रामिंग भाषा में आदिम डेटा प्रकार चार एक हस्ताक्षरित 16-बिट पूर्णांक है जो यू +0000 से यू + एफएफएफएफ या यूटीएफ -16 की कोड इकाइयों में यूनिकोड कोड बिंदु का प्रतिनिधित्व कर सकता है। जावा प्लेटफार्म में विभिन्न प्रकार और वर्ग जो चरित्र अनुक्रमों का प्रतिनिधित्व करते हैं - char [], java.lang.CharSequence (जैसे स्ट्रिंग क्लास) के कार्यान्वयन, और java.text.CharacterIterator के कार्यान्वयन - यूटीएफ -16 अनुक्रम हैं।

JVM स्तर पर

, यदि आप -XX:+UseCompressedStrings वास्तविक में-स्मृति प्रतिनिधित्व 8 बिट, ISO-8859-1 लेकिन केवल तार जो कर के लिए हो सकता है (जो जावा 6 में से कुछ अपडेट के लिए डिफ़ॉल्ट है) का उपयोग कर रहे यूटीएफ -16 एन्कोडिंग की आवश्यकता नहीं है।

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

और स्ट्रिंग क्रमबद्धता के लिए UTF-8 के एक गैर मानक संशोधन का समर्थन करता है।

सीरियलाइज्ड स्ट्रिंग्स डिफ़ॉल्ट रूप से यूटीएफ -8 का उपयोग करते हैं।

और जावा कितने बाइट मेमोरी में चार के लिए उपयोग करता है?

char हमेशा दो बाइट्स होता है, यदि आप ऑब्जेक्ट में पैडिंग की आवश्यकता को अनदेखा करते हैं।

नोट: एक कोड बिंदु (जो चरित्र> 65535 की अनुमति देता है) एक या दो वर्णों का उपयोग कर सकता है, यानी 2 या 4 बाइट्स।

+2

जावा क्रमबद्धता (और कक्षा-फाइलें) [संशोधित सीईएसयू -8 का उपयोग करें हालांकि) (http://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8), जो एक संशोधित यूटीएफ -8 है। – Deduplicator

+1

नया यूआरएल: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html –

+0

नया यूआरएल: https://docs.oracle.com/javase/8/docs/api /java/lang/String.html नोट: जावा 9 अगले वर्ष बाहर होना चाहिए। ;) –

9

String प्रकार में उपयोग की जाने वाली इन-मेमोरी प्रस्तुति यूटीएफ -16 है। संशोधित यूटीएफ -8 अन्य संदर्भों में प्रयोग किया जाता है; जैसे ".class" फ़ाइलों में, और ऑब्जेक्ट क्रमबद्धता प्रारूप।

आप java.lang.String कक्षा के स्रोत कोड को देख कर इसकी पुष्टि कर सकते हैं।

अद्यतन

जावा 6 अद्यतन 21 और बाद में, वहाँ एक गैर मानक संकुचित तार सक्रिय करने का विकल्प है के साथ

जावा 9 के साथ और बाद में, डिफ़ॉल्ट रूप से स्ट्रिंग्स के लिए कॉम्पैक्ट प्रतिनिधित्व का उपयोग करने के लिए व्यवहार बदल दिया गया है। java आदेश documentation अब कहना है कि यह:

-XX: -CompactStrings

कॉम्पैक्ट स्ट्रिंग्स सुविधा अक्षम करता है। डिफ़ॉल्ट रूप से, यह विकल्प सक्षम है। जब यह विकल्प सक्षम होता है, तो जावा स्ट्रिंग्स में केवल सिंगल-बाइट वर्ण होते हैं जिन्हें आंतरिक रूप से प्रदर्शित किया जाता है और आईएसओ -885 9 -1/लैटिन -1 एन्कोडिंग का उपयोग करके एकल-बाइट-प्रति-चरित्र स्ट्रिंग्स के रूप में संग्रहीत किया जाता है। यह 50% तक, स्ट्रिंग्स के लिए आवश्यक स्थान की मात्रा को केवल एकल-बाइट वर्णों से कम करता है। जावा स्ट्रिंग्स के लिए कम से कम एक मल्टीबाइट वर्ण होता है: इन्हें यूटीएफ -16 एन्कोडिंग का उपयोग करके प्रति वर्ण 2 बाइट्स के रूप में दर्शाया जाता है। कॉम्पैक्ट स्ट्रिंग्स सुविधा को अक्षम करने से यूटीएफ -16 एन्कोडिंग के उपयोग को सभी जावा स्ट्रिंग्स के आंतरिक प्रतिनिधित्व के रूप में उपयोग किया जाता है।

(ध्यान दें कि यूटीएफ -8 एन्कोडिंग नहीं है।)

यह भी देखें:

3

एक char का आकार 2 बाइट्स है।

इसलिए, मैं कहूंगा कि जावा आंतरिक स्ट्रिंग प्रतिनिधित्व के लिए यूटीएफ -16 का उपयोग करता है।

+1

यूनिकोड वर्ण जावा में 4 बाइट्स हो सकते हैं। – tchrist

+0

@ क्रिसमस कैसे? जावा में एक चरित्र 4 बाइट कैसे हो सकता है? –

+0

@ कोरे टुगे यूनिकोड वर्ण (कोड पॉइंट) 0 और 0x10FFFF के बीच मान हैं। – tchrist

10

यूटीएफ -16।

http://java.sun.com/javase/technologies/core/basic/intl/faq.jsp से:

कैसे पाठ जावा मंच में प्रस्तुत किया जाता है?

जावा प्रोग्रामिंग भाषा यूनिकोड चरित्र सेट, पर आधारित है और कई पुस्तकालय यूनिकोड मानक को लागू करते हैं। जावा प्रोग्रामिंग भाषा में आदिम डेटा प्रकार चार एक हस्ताक्षरित 16-बिट पूर्णांक है जो यू +0000 से यू + एफएफएफएफ, या यूटीएफ -16 की कोड इकाइयों में यूनिकोड कोड बिंदु का प्रतिनिधित्व कर सकता है। में विभिन्न प्रकार और वर्ग जावा प्लेटफ़ॉर्म जो वर्ण अनुक्रमों का प्रतिनिधित्व करते हैं - char [], java.lang.CharSequence (जैसे स्ट्रिंग क्लास), और java.text.CharacterIterator के कार्यान्वयन - कार्यान्वयन यूटीएफ -16 दृश्यों।

-4

जावा आंतरिक रूप से यूटीएफ -16 के रूप में तारों को स्टोर करता है और प्रत्येक चरित्र के लिए 2 बाइट्स का उपयोग करता है।

+10

यह उत्तर गलत है। चूंकि जावा यूटीएफ -16 का उपयोग करता है, इसलिए प्रत्येक यूनिकोड वर्ण या तो 2 बाइट्स या 4 बाइट्स होता है। – tchrist

+0

@tchrist 4 बाइट्स में यूटीएफ -16 एन्कोड कैसे समाप्त हो सकता है? यूटीएफ -16 हमेशा 2 बाइट नहीं है? –

+4

@ कोरेतुगेय संख्या, यूटीएफ -16 या तो 2 बाइट्स या 4 बाइट्स है। यह यूटीएफ -8 की तरह एक चर-चौड़ाई एन्कोडिंग है। केवल अप्रचलित यूसीएस-2 2 बाइट्स है, और यह बहुत लंबा है। – tchrist

-4

जावा 18 अंतरराष्ट्रीय भाषाओं में उपलब्ध है और यूनिकोड चरित्र सेट के बाद, जिसमें 18 अंतरराष्ट्रीय भाषाओं में उपलब्ध सभी पात्र शामिल हैं और में 65536 वर्ण हैं। और जावा यूटीएफ -16 के बाद जावा में चार का आकार 2 है बाइट्स।

+2

जावा में यूनिकोड वर्ण का आकार 2 बाइट्स और 4 बाइट्स के बीच बदलता है, इस पर निर्भर करता है कि हम विमान 0 में हैं या नहीं। – tchrist

संबंधित मुद्दे