Monday 15 August 2011

c# - stream.read gives corrupted bytes -


  एचटीटीपी वेब रिस्पांस प्रतिक्रिया = (एचटीटीपी वेबबेंस) अनुरोध। गेटरेस्पॉन्स (); स्ट्रीम स्ट्रीम = प्रतिसाद। गेटरेस्पॉन्सस्ट्रीम (); Int sizeToRead = (int) response.ContentLength; Int sizeRead = 0; इंट बफर = 1; बाइट [] बाइट्स = नया बाइट [आकार टयोराइड]; जबकि (आकार रीडर & gt; 0) {int rs = sizeToRead & gt; बफर? बफर: साइज रीडर; स्ट्रीम। बाइट (आकार, आकार, रीड, आरएस); SizeToRead - = आरएस; SizeRead + = आरएस; } स्ट्रीम। बंद करें (); System.IO.File.WriteAllBytes ("c: \\ tmp \\ b.mp3", बाइट्स);   

मेरे पास कोड का उपरोक्त भाग है इसका उद्देश्य किसी एमपी 3 फाइल को कहीं से डाउनलोड करना है और उसे c: \ tmp \ filename में सहेजना है। और यह पूरी तरह से काम करता है।

हालांकि, अगर मैं बफर आकार को कुछ नहीं 1 में बदलता हूं, तो 512 कहें। डाउनलोड की गई एमपी 3 फाइल लहराती होगी। मैंने अपने प्रोग्राम द्वारा ब्राउज़र द्वारा डाउनलोड किए गए फ़ाइल से डाउनलोड की गई फ़ाइल की तुलना की है, मुझे पता चला कि मेरे प्रोग्राम द्वारा डाउनलोड की जाने वाली एमपी 3 फाइल के कुछ बाइट्स 0 पर सेट होते हैं (उनके फ़ाइल आकार समान हैं)।

इसके अलावा , मैंने ट्रैफ़िक की निगरानी करने के लिए भी इस्तेमाल किया है जब मैं एमपी 3 फाइल को डाउनलोड करने के लिए कोड के ऊपरी हिस्से का उपयोग करता हूं। मैंने अपने कार्यक्रम और ब्राउज़र से एमपी 3 डाउनलोड किया है, सभी बाइट समान हैं।

तो, मुझे लगता है कि समस्या स्ट्रीम रीडर या पढ़ने की प्रक्रिया के अंदर है क्या किसी को पता है कि ऐसा क्यों होता है? और बफर आकार को 1 के बिना सेट किए बिना इसे कैसे हल किया जाए?

एक वापस आ जाता है जो आपको बताता है कि कितने बाइट थे वास्तव में पढ़ें यदि आप किसी धारा से काम कर रहे हैं तो आप उस जानकारी में बेहतर ढंग से लेते थे और उस पर कार्य करते थे।

इसे किसी अन्य तरीके से रखने के लिए, सिर्फ इसलिए कि 2 बाइट के लिए पढ़ें, इसका अर्थ यह नहीं है कि आपके बफ़र में 2 वैध बाइट्स हैं।

यदि आपको एक विशेष संख्या में बाइट्स प्राप्त करने की आवश्यकता है (जो आप जानते हैं), तब तक आपको लूप चाहिए जब तक कि आप उस नंबर को प्राप्त नहीं करते बाइट्स।

No comments:

Post a Comment