वास्तव में एक बाइट स्ट्रीम क्या है?


34

क्या कोई मुझे समझा सकता है कि बाइट स्ट्रीम वास्तव में क्या है? क्या इसमें बाइट्स (हेक्स डेटा) या बाइनरी डेटा या केवल अंग्रेजी अक्षर हैं? मैं "कच्चे डेटा" शब्द के बारे में भी भ्रमित हूं। अगर किसी ने मुझसे "4 बाइट डेटा को रिवर्स" करने के लिए कहा है, तो मुझे क्या मानना ​​चाहिए कि डेटा हेक्स कोड या बाइनरी कोड है?


मेरे दो सेंट जवाब योग्य नहीं हैं (और नीचे पहले से ही अच्छे हैं) लेकिन मैं सिर्फ इन 2 लेखों के लिंक प्रदान करना चाहता हूं जो संभवतः इस बारे में अच्छी जानकारी प्रदान करेंगे कि "कच्चे डेटा" की व्याख्या कैसे वास्तव में कुछ करने के लिए की जाती है (यह नहीं है) कुछ भी मतलब है जब तक आप यह नहीं जानते हैं कि यह क्या प्रतिनिधित्व करना है और इसे कैसे इनकोड किया गया है / संग्रहीत है) betterexplained.com/articles/… joelonsoftware.com/articles/Unicode.html
माइकल

1
मुझे लगता है कि जावा को उन चीजों के लिए सी / सी ++ के उपयोग से बचने के लिए बाइट बनाया गया है जिन्हें एक चरित्र के रूप में नहीं समझा जा सकता है। c / c ++ में char का बहुत उपयोग किया गया था क्योंकि char का आकार 1 बाइट है। यूनिक्स में भी डिवाइस ब्लॉक और कैरेक्टर डिवाइस हैं। यदि आप चार उपकरणों से पढ़ते हैं, तो आपको अहस्ताक्षरित चार्ट / बाइट्स की धारा मिलती है।
imel96

बाइट स्ट्रीम अस्पष्ट है। ऑक्टेट स्ट्रीम नहीं है।
हिरण हंटर

डेटा की व्याख्या कई स्तरों पर की जा सकती है। निचले हिस्से में यह ऑन-ऑफ इलेक्ट्रिक स्तरों की एक श्रृंखला है। थोड़ा ऊपर यह बाइट्स का एक हिस्सा है, या जैसा कि आप कहते हैं, एक बाइट स्ट्रीम । यहां तक ​​कि उच्चतर आप कच्चे डेटा की व्याख्या करना शुरू करते हैं। बाइट्स की व्याख्या कई तरीकों से पाठ (एनकोडिंग) के रूप में की जा सकती है। पूर्णांक संख्या, भी, (बड़ा या छोटा एंडियन)। आप और भी ऊपर जा सकते हैं। आपके पास एक ज़िप फ़ाइल है। वह ज़िप फ़ाइल कल से आपका बैकअप है। और इसी तरह। समस्या यह है कि सटीक स्तर अक्सर निहित होता है और स्पष्ट नहीं किया जाता है, और यह भ्रामक हो सकता है।
नवपल्ली ply

जवाबों:


52

बाइट धाराओं में बाइट्स शामिल हैं। यह वास्तव में क्या है में टूट गया, यह 1 और 0s से बना 8 बिट्स है। यदि यह एक संख्या का प्रतिनिधित्व कर रहा था, तो यह 0 से 255 तक कोई भी संख्या होगी (जो, मैं जोड़ सकता हूं, यह कोई संयोग नहीं है कि आईपी पते में 4 नंबर हमेशा 0 से 255 तक क्यों होते हैं)। बाइट धाराएँ आमतौर पर परिष्कृत इंटरफेस होती हैं जिसका अर्थ है कि एक बुनियादी बफर बाइट को छिपाने के लिए इस्तेमाल किया गया गोलाकार बफर को पकड़ना (आप बफर को भरें और किसी को खाली करने के लिए प्रतीक्षा करें, जिस समय यह बस बफर को फिर से भरता है)।

क्या बिल्ली का प्रतिनिधित्व करता है? खैर, यह एक पाठ फ़ाइल, या एक छवि, या एक लाइव वीडियो स्ट्रीम का प्रतिनिधित्व कर सकता है। क्या यह है पूरी तरह से है जो इसे पढ़ रही है के संदर्भ पर निर्भर है। हेक्स प्रतिनिधित्व एक ही बात कहने का एक और तरीका है, हालांकि संख्याओं के बजाय अपने हेक्स प्रतिनिधित्व के संदर्भ में बाइट्स का प्रबंधन करना कभी-कभी अधिक सुविधाजनक होता है हालांकि यह एक ही बात है।

जब आप कच्चे डेटा की बात कर रहे हैं, तो आप आमतौर पर बाइट डेटा का उल्लेख कर रहे हैं। डेटा एक टैग के बिना आता है "मैं एक छवि फ़ाइल हूं!" आमतौर पर आप केवल कच्चे डेटा से निपटते हैं जब आप वास्तव में परवाह नहीं करते हैं कि डेटा समग्र रूप से क्या दर्शाता है। उदाहरण के लिए, यदि मैं किसी चित्र को उसके काले और सफेद संस्करण में परिवर्तित करना चाहता था, तो मैं एक छवि के कच्चे डेटा को पढ़ने के लिए कह सकता हूं और प्रत्येक 3 बाइट्स को पढ़ने के लिए (जो वास्तव में लाल रंग का प्रतिनिधित्व करता है, हरे रंग का प्रतिनिधित्व करता है, और इसका प्रतिनिधित्व करता है) नीला रंग), इसकी संख्या मान जोड़ें और 3 से विभाजित करें, फिर उस मान को 3 बार लिखें। अनिवार्य रूप से मैं जो कर रहा हूं वह एक पिक्सेल के लाल, हरे और नीले रंग के मूल्यों के औसत है और उसी से इसका ग्रे समकक्ष पिक्सेल बनाना है। हालांकि, जब आप "बाइट बाय" के स्तर पर डेटा के संचालन के बारे में बात करते हैं, तो आप डॉन '

या, शायद आप एक डेटाबेस में एक फ़ाइल को सहेजना चाहते हैं, लेकिन यह आपको अपने "कच्चे डेटा" को एक बूँद डेटा प्रकार में डालने के लिए कहता है। इसका सीधा मतलब है कि फाइल के डेटा को एक बड़े बाइट सरणी में बदलना, जिसे डेटाबेस समझ सकता है और प्रबंधित कर सकता है। आप पाएंगे कि जब आप डेटाबेस से उस मान को पुनः प्राप्त करते हैं, तो यह केवल एक बड़ा बाइट सरणी होगा जैसा कि आपने शुरू में डेटाबेस को शुरू करने के लिए प्रदान किया था। यदि वह डेटा एक फ़ाइल थी, तो आपको, प्रोग्रामर को उस बाइट डेटा को फिर से समझना होगा जैसे कि आप एक बार में एक बाइट फाइल पढ़ रहे थे।

यदि कोई आपसे "4 बाइट डेटा को रिवर्स" करने के लिए कहता है, तो मुझे लगता है कि यह संख्याओं के बड़े-एंडियन बनाम छोटे-एंडियन व्याख्या को संदर्भित करता है, जो सबसे कम या कम महत्वपूर्ण बाइट के साथ शुरू होने वाली संख्या लिखता है। इससे कोई फर्क नहीं पड़ता कि किसी संख्या को बड़े-एंडियन या छोटे-एंडियन के रूप में दर्शाया गया है, बस यह कि नंबर पढ़ने वाले सभी सिस्टम इसे लगातार व्याख्या करते हैं।

यह कहने की ज़रूरत नहीं है कि वास्तविक संख्या प्रतिनिधित्व (या उस मामले के लिए हेक्स प्रतिनिधित्व) को बदल दिया जाता है, बस यह कि जिस क्रम में ये 4 बाइट्स एक संख्या बनाते हैं उसे उलट देना चाहिए। तो मान लें कि आपके पास 0x01, 0x02, 0x03 और 0x04 हैं। इन्हें उलटने के लिए, आपके पास इसके बजाय 0x04, 0x03, 0x02, 0x01 होंगे। सिस्टम संभवतः इन 4 बाइट्स को उल्टे क्रम में पढ़ेगा और चूंकि आपने पहले ही इसे उलट दिया है, इसलिए मूल्य की व्याख्या उसी तरह की जाती है जैसी कि कच्चे डेटा में की गई थी।

मुझे आशा है कि यह समझाता है!


सब कुछ ठीक है ..! क्या आप कृपया "कच्चे डेटा" के उत्तर के बारे में विस्तार से बता सकते हैं?
user2720323

@ user2720323 ठीक है, बेहतर समझाने के लिए संशोधित "कच्चा डेटा।" :)
नील

एक बात का ध्यान रखें ... सभी डेटा केवल बाइट्स का एक संग्रह है। उन बाइट्स का अर्थ किसी प्रकार के मेटाडेटा (फ़ाइल एक्सटेंशन, डेटाबेस फ़ील्ड, आदि) द्वारा परिभाषित किया गया है। एक छवि फ़ाइल को ASCII फ़ाइल के रूप में व्याख्या की जा सकती है और इसके विपरीत। पाठ या छवि निरर्थक हो सकती है, लेकिन यह अभी भी संभव है। (डर्प ... मुझे अगले उत्तर पढ़ने चाहिए थे)
डेव नी

2
@kevincline कृपया इस तथ्य की सराहना करने की कोशिश करें कि मैं एक विचार व्यक्त करने की कोशिश कर रहा हूं। मेरी प्राथमिकता एक सटीक एल्गोरिदम लिखना नहीं है। यदि आप अधिक सटीक होना चाहते हैं, तो आप मानव आंख के अनुसार लाल हरे और नीले मूल्यों का वजन कर सकते हैं।
नील

18

एक बाइट बस जानकारी की एक इकाई है - यह कुछ भी हो सकता है। अपने आप में एक बाइट का मतलब कुछ भी नहीं है, आपको इसे किसी प्रकार का अर्थ संलग्न करना होगा।

तो, उस पर विस्तार करने के लिए -

क्या इसमें बाइट्स (हेक्स डेटा) या बाइनरी डेटा या केवल अंग्रेजी अक्षर हैं?

हेक्स डेटा बाइनरी डेटा के समान है। यह डेटा प्रदर्शित करने का एक अलग तरीका है। उदाहरण के लिए, 0x41 = 0b01000001 = 'ए' = 65 (दशमलव)। अंग्रेजी अक्षर केवल उसी का एक उपसमूह होगा।

अगर किसी ने मुझसे "4 बाइट डेटा को रिवर्स" करने के लिए कहा है, तो मुझे क्या मानना ​​चाहिए कि डेटा हेक्स कोड या बाइनरी कोड है?

चूंकि हेक्स डेटा का सिर्फ एक प्रतिनिधित्व है, इसलिए इससे कोई फर्क नहीं पड़ता कि आप इसके बारे में कैसे सोचते हैं। यदि आपके पास 0x65 0x66 0x67 0x68इसका उल्टा करने के लिए डेटा है , तो आपको मिलेगा 0x68 0x67 0x66 0x65। यदि आप इस डेटा को वर्णों के संदर्भ में देख रहे हैं, तो आप मूल रूप से होंगे A B C D, लेकिन अब आपके पास है D C B A

एक बाइट स्ट्रीम पर वापस - यह केवल डेटा का एक क्रम है। आपको यह जानने की आवश्यकता है कि इसका उपयोग करने के लिए डेटा क्या दर्शाता है। यदि हम एक टेक्स्ट फ़ाइल पढ़ रहे हैं, तो जब आप फ़ाइल पढ़ रहे होते हैं तो आपको जो बाइट स्ट्रीम मिलती है, वह किसी प्रकार का अक्षर होती है। एक निष्पादन योग्य फ़ाइल में अनपेक्षित वर्णों का एक समूह होगा, यही कारण है कि इसे बाइनरी फ़ाइल कहा जाएगा । स्पष्ट रूप से, एक पाठ संपादक में एक निष्पादन योग्य को खोलना संभव है, लेकिन यह कुछ भी उपयोगी नहीं करता है।


1
+1 लेकिन लेट बिट में बाइनरी पर जोर गलत लगता है। "बाइनरी डेटा" में अक्सर अनपेक्षित वर्ण होते हैं, लेकिन इसे "बाइनरी" कहा जाता है क्योंकि यह बाइनरी अंकों से बना होता है, इसलिए नहीं कि इसमें अनपेक्षित वर्ण होते हैं। मैं समझता हूं कि आप मुद्रण योग्य "पाठ" डेटा के विरोध में "बाइनरी" का उपयोग कर रहे हैं, लेकिन मुझे लगता है कि यह ओपी को और भी भ्रमित कर सकता है।
कालेब

मैं एक सवाल उलट रहा हूँ .. अगर मेरे पास एक फ़ाइल में पूर्णांक (32 बिट) 325487 है तो मैं इस 4 बाइट पूर्णांक को कैसे उलट सकता हूं? इसी तरह मेरे पास एक शब्द है ("तुम कैसे हो"), प्रत्येक वर्ण को बाइट मानकर इस स्ट्रिंग को कैसे उल्टा किया जाए।
user2720323

@ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24); यह शाब्दिक रूप से प्रत्येक बाइट लेता है, इसे सही स्थिति में स्थानांतरित करता है, और दूसरों के साथ जोड़ता है।
नील

2

एक बाइट स्ट्रीम बाइट्स का एक क्रमबद्ध क्रम है। पहली बाइट है, जिसमें कोई पूर्ववर्ती नहीं है। इसका उत्तराधिकारी दूसरा बाइट है, और इसी तरह। आजकल, एक बाइट को व्यापक रूप से आठ बिट्स से मिलकर समझा जाता है। यदि हम अधिक सटीक होना चाहते हैं, तो हम ओक्टेट स्ट्रीम और ऑक्टेट शब्द का उपयोग करते हैं । अभी भी बाइट के साथ कंप्यूटर मौजूद हैं जो आठ बिट्स चौड़े नहीं हैं।

हेक्साडेसिमल संख्या लिखने का एक तरीका है, और बाइनरी डेटा के लिए एक मुद्रित प्रतिनिधित्व के रूप में कार्य करता है । हेक्साडेसिमल वास्तव में पाठ है। उदाहरण के लिए, हेक्साडेसिमल मान FEएक बाइट का प्रतिनिधित्व कर सकता है: बिट्स 11111110जिनके पास दशमलव मान है 255। हालांकि FEवास्तव में एक चरित्र स्ट्रिंग है जिसमें वर्ण शामिल हैं, Fऔर इसके लिए US-ASCII या ISO-646 वर्ण सेट में दो बाइट्स की Eआवश्यकता होती है ! ये दो बाइट्स क्या है , और मूल्य बाइट 254 के साथ सिंगल बाइट एक मुद्रित संकेतन के रूप में क्या दर्शाता है।FE FE

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

और कच्चे डेटा का अर्थ है बिट्स जिसका अर्थ केवल "बिट्स की सरणी" से परे कोई संरचना होना नहीं है। कच्चे डेटा में आमतौर पर एक संरचना होती है और कुछ का प्रतिनिधित्व करता है, लेकिन जब हम इसे कच्चे डेटा के रूप में देख रहे हैं, तो हम या तो पल की व्याख्या की अनदेखी कर रहे हैं (उदाहरण के लिए, हम इसकी शुद्धता को सत्यापित करने के लिए डेटा प्रकार के कच्चे प्रतिनिधित्व को देख रहे हैं बिट स्तर के विस्तार के लिए), या व्याख्या उपलब्ध नहीं है (हमारे पास कुछ डेटा है, लेकिन हम डेटा की संरचना और यह क्या प्रतिनिधित्व करता है) को नहीं समझते हैं।


पीडीपी -10 में चर आकार के बाइट्स से निपटने के निर्देश थे। सबसे आम सात बिट ASCII था, उसके बाद छह-बिट अक्षर।
केविन क्लाइन

0

एक बाइट 8 बिट है। एक बिट 0 या 1 है। "कच्चा डेटा" एक के बाद एक बाइट का सिर्फ एक प्रवाह है। एक बाइट स्ट्रीम एक फ़ाइल, एक नेटवर्क कनेक्शन, एक क्रमबद्ध वस्तु, एक यादृच्छिक संख्या जनरेटर, आदि से आ सकती है।

  • बाइट प्रदर्शित करने के कई तरीके हैं: बाइनरी (01110110), हेक्स = हेक्सिडेसिमल (7 सी), ऑक्टल (0271), या दशमलव (215)। सभी मामलों में, अधिकतम मूल्य 255 (आधार 10) है।

  • कभी-कभी बाइट्स को एसेसी जैसे पात्रों को सौंपा जाता है। एक यूनिक्स कमांड लाइन पर "ascii" टाइप करें, और आपको एक बड़ी तालिका मिलेगी जो संबंधित चरित्र के लिए 0-255 या (0-FF हेक्स) बाइट घाटी को मैप करती है। उदाहरण के लिए, अंतरिक्ष x20 है और "A" x40 है। ध्यान दें कि कुछ बाइट मान वर्णों को नियंत्रित करने के लिए मैप करते हैं और प्रिंट करने योग्य नहीं होते हैं। लेकिन बाइट्स खुद अक्षर नहीं हैं - वे सिर्फ बिट्स का एक बंडल है। एक संख्या।

  • "रिवर्स 4 बाइट्स" कुछ बाइट्स 123 42 231 0 को ले जाएगा और ऑर्डर को फ्लिप करेगा - 0 231 42 123. एक बाइट स्टीम पर लागू होता है, मैं शायद 4 बाइट्स पढ़ूंगा, उन्हें उल्टा करूंगा, अगले 4 बाइट्स पढ़ूंगा, आदि। ।

(BTW कि समस्या प्रासंगिक है, क्योंकि यदि आप बाइट्स के रूप में 255 से अधिक संख्या का प्रतिनिधित्व करना चाहते हैं, तो आपको एक से अधिक बाइट का उपयोग करने की आवश्यकता है। लेकिन फिर सवाल यह है कि क्या "सबसे बड़ी" बाइट पहले आती है, या आखिरी? उसे कहा जाता है? बड़े एंडियन या छोटे एंडियन - उन लोगों के बारे में अधिक पृष्ठभूमि के लिए देखें जो कच्चे बाइट स्ट्रीम में बाइट्स के चारों ओर फेरबदल करने के लिए उपयोगी हैं।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.