2012-02-10 20 views
5

मैं एक बाइनरी फ़ाइल को एक स्ट्रिंग में कनवर्ट करना चाहता हूं जिसे फिर बाइनरी फ़ाइल में परिवर्तित किया जा सकता है।बाइट्स को एक स्ट्रिंग में कनवर्ट करना C#

byte[] byteArray = File.ReadAllBytes(@"D:\pic.png"); 
for (int i = 0; i < byteArray.Length; i++) 
{ 
    textBox1.Text += (char)byteArray[i]; 
} 

लेकिन यह बहुत धीमी है, इसके बारे में 20 सेकंड लेता है i5 CPU पर 5KB कन्वर्ट करने के लिए: मैं इस कोशिश की। मैंने देखा कि नोटपैड बहुत कम समय में वही करता है। इसे कैसे करें इस पर कोई विचार?

धन्यवाद

उत्तर

15

आप किसी भी जानकारी है, तो आप सब पर बात की इस तरह कर नहीं किया जाना चाहिए खोने के बिना द्विआधारी करने के लिए वापस बदलने में सक्षम होना चाहते हैं - आप बेस 64 एन्कोडिंग या कुछ इसी तरह का उपयोग करना चाहिए:

textBox1.Text = Convert.ToBase64String(byteArray); 

फिर आप byte[] data = Convert.FromBase64String(text); का उपयोग कर वापस परिवर्तित कर सकते हैं। महत्वपूर्ण बात यह है कि बेस 64 मनमाने ढंग से बाइनरी डेटा को एएससीआईआईआई पाठ में परिवर्तित करता है; सभी बाइट अनुक्रम मान्य हैं, सभी को गोल-ट्रिप किया जा सकता है, और क्योंकि इसे केवल एएससीआईआईआई के लिए कई परिवहन के अनुकूल है।

वहाँ चार महत्वपूर्ण दूर यहाँ लेने के लिए चीजें हैं: जैसे कि यह एक विशेष एन्कोडिंग में मान्य पाठ थे

  • मनमाने ढंग से बाइनरी डेटा का इलाज न करें। फिल हैक wrote about this in a blog post recently, मेरे कुछ SO उत्तरों के जवाब में।
  • Don't perform string concatenation in a loop; StringBuilder का उपयोग करें यदि आप बहुत सारी बिट्स से एक अंतिम स्ट्रिंग बनाना चाहते हैं, और आप नहीं जानते कि अग्रिम में कितने बिट्स
  • अनावश्यक रूप से एक लूप में UI गुणों का उपयोग न करें - भले ही पिछले चरण ठीक थे, यह एक पाश के साथ स्ट्रिंग के निर्माण के लिए बेहतर होता है और फिर Text संपत्ति के लिए एक एकल काम कर
  • स्थिति है जहाँ आप वास्तव में पाठ इनकोडिंग गया है के लिए System.Text.Encoding बारे में जानें; Encoding.UTF8.GetString(byteArray) उचित हो गया होता अगर इस UTF-8 एन्कोडेड डेटा में किया गया था, उदाहरण के
+1

के लिए कैसे ToBase64String जानकारी के नुकसान को रोकने करता है? –

+0

@ ब्रैड: क्योंकि आप बाद में इसे फिर से प्राप्त करने के लिए 'कनवर्ट.फ्रॉमबेस 64String' का उपयोग कर सकते हैं ... –

+0

तो विचार केवल उसी एन्कोडिंग का उपयोग करें और बेस 64 यूटीएफ 8, 16, आदि के लिए सबसे सामान्य है। ..? –

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