/ / ANSI और UNICODE को धाराओं का उपयोग करके ग्रंथों को पढ़ना और लिखना क्यों मुश्किल है? - जावा, यूनिकोड, एनी

ANSI और UNICODE को धाराओं का उपयोग करके ग्रंथों को पढ़ना और लिखना मुश्किल क्यों है? - जावा, यूनिकोड, एनी

मुझे पता चला है कि जावा में रीडर और राइटर हैंपाठ संसाधन से जानकारी पढ़ने और लिखने के लिए बेहतर है, और पाठक / लेखक चरित्र-आधारित हैं जबकि धाराएं बाइट-आधारित हैं। हालाँकि, मैं "एक स्रोत के पार आया हूँ" जिसने कहा कि कुछ पाठ ANSI ओडर यूनिकोड द्वारा कोडित हैं। ANSI को कोड रूपांतरण की आवश्यकता होती है और यूनिकोड को UFT-8 या UFT-16 जैसे विभिन्न स्वरूपों में कोडित किया जा सकता है। इसलिए पाठक / लेखक बेहतर हैं ”।

क्या ये कोड रूपांतरण और विभिन्न स्वरूपों का टेक्स्ट संसाधन से कोई लेना-देना है? इसलिए, पाठक और लेखक क्या कर सकते हैं जो उन्हें ग्रंथों से निपटने में धाराओं से बेहतर बनाता है?

उत्तर:

जवाब के लिए 0 № 1

जब जावा डिजाइन किया गया था, तो इसे धारण करने का निर्णय लिया गया था टेक्स्ट यूनिकोड के रूप में जावा के अंदर, इसलिए सभी लिपियों, कहते हैं कि ग्रीक और कोरियाई को जोड़ा जा सकता है।

यूनिकोड सभी प्रतीकों की एक संख्या है (कोड अंक), और utf-8 (मल्टी-बाइट, सामान्य रूप से सबसे कॉम्पैक्ट), UTF-16 LE / BE (2 बाइट्स) या यहां तक ​​कि UTF-32 द्वारा कोडित किया जा सकता है।

इसलिए आंतरिक रूप से String एक .class में स्थिरांक utf-8 में हैं प्रारूप char UTF-16 के लिए 2 बाइट्स है और स्ट्रिंग एक सरणी रखती है char.

बाइनरी डेटा, पसंद byte[] या InputStream/OutputStream पाठ हो सकता है। लेकिन इसकी व्याख्या करना टेक्स्ट उन बाइट्स के एन्कोडिंग / चारसेट को जानने की जरूरत है। इसलिए हमेशा बाइट्स का रूपांतरण होता है और उन बाइट्स के कुछ चार्ट आंतरिक यूनिकोड (UTF-16) में बदल जाते हैं।

प्रश्न का उत्तर देने के लिए, यह किसी भी तरह से द्विआधारी डेटा के चारसेट प्रदान करने के लिए अपरिहार्य है। यह बाइनरी डेटा का एक दोष है।

जब कोई पहुंचता है String, char, Reader, Writer एक पहले से ही यूनिकोड पाठ पर पूरी तरह से काम करता है।

ब्रिजिंग कक्षाएं हैं InputStreamReader, OutputStreamWriter तथा Files कुछ अच्छी उपयोगिता कार्य प्रदान करता है।

इस स्थिति की तुलना C से करें, जहां अहस्ताक्षरित हैचार बाइट (या नहीं) के समान हो सकता है, और एक विस्तृत चार प्रयोग करने योग्य हो सकता है या नहीं। जावा ने कुछ भाषाओं की तुलना में यह बेहतर किया। हालाँकि C / C ++ बैकग्राउंड वाले जावा प्रोग्रामर को कभी भी उपयोग नहीं करना चाहिए String या char[] द्विआधारी डेटा के लिए: डबल मेमोरी, गैर-अवांछनीय और भ्रष्ट रूपांतरण। बल्कि byte[], ByteArrayOutputStream, ByteBuffer.