दिलचस्प पोस्ट
64-बिट OS पर 32-बिट जेवीएम का अधिकतम जावा ढेर आकार जावास्क्रिप्ट के regex.exec () हमेशा एक ही मान क्यों नहीं लौटाता है? JqGrid ऊपर पेजर (नेविगेशन बार) की स्थिति में असमर्थ दृश्यविशेषरूप देखें: निर्धारित करें कि नियंत्रक को पॉप किया जा रहा है या उप-दृश्य नियंत्रक दिखा रहा है या नहीं त्रुटि LNK2038: '_MSC_VER' के लिए बेमेल पता चला: मान '1600' CppFile1.obj में मान '1700' से मेल नहीं खाती एंड्रॉइड प्रोजेक्ट में थ्रीटीएपीपी का उपयोग कैसे करें एंड्रॉइड इम्यूलेटर के आईपी पते को कैसे प्राप्त करें? सी ++ फ़ंक्टर्स – और उनका उपयोग कारखाना और सार फैक्ट्री पैटर्न के बीच मूल अंतर क्या है? OS X पर Multiarch OpenSSL बनाएं शाखाओं की सूची किस तरह दी जाए जो दी गई प्रतिबद्धता है? कोनालर जेएस इनिट एनजी-मॉडल डिफ़ॉल्ट मानों से JSON स्ट्रिंग में बाइनरी डेटा Base64 से बेहतर कुछ लाइब्रेरी का उपयोग किए बिना जावास्क्रिप्ट में एक और तत्व के बाद एक तत्व कैसे सम्मिलित करें? सीएसएस संपत्ति से पहले तारांकन का उद्देश्य

मैं स्ट्रिंग से एक स्ट्रीम कैसे उत्पन्न करूं?

मुझे किसी विधि के लिए एक यूनिट टेस्ट लिखना होगा जो किसी पाठ फ़ाइल से आने वाली धारा लेती है मैं ऐसा कुछ करना चाहूंगा:

Stream s = GenerateStreamFromString("a,b \nc,d"); 

वेब के समाधान से एकत्रित समाधान "मैं स्ट्रिंग से एक स्ट्रीम कैसे उत्पन्न करूं?"

 public static Stream GenerateStreamFromString(string s) { MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(s); writer.Flush(); stream.Position = 0; return stream; } 

का उपयोग करने के लिए मत भूलना:

 using (Stream s = GenerateStreamFromString("a,b \nc,d")) { // ... Do stuff to stream } 

StreamWriter बारे में निपटारा नहीं किया जा रहा है StreamWriter केवल बेस स्ट्रीम के आस-पास एक आवरण है, और किसी भी ऐसे संसाधनों का उपयोग नहीं करता है, जिन्हें निपटाना होगा। Dispose विधि StreamWriter को StreamWriter करने वाली अंतर्निहित Stream को बंद कर देगी इस मामले में वह MemoryStream है जिसे हम वापस करना चाहते हैं।

.NET 4.5 में StreamWriter लिए एक अधिभार होता है जो अंतर्निहित स्ट्रीम को लेखक के निस्तारण के बाद खुले रखता है, लेकिन यह कोड एक ही काम करता है और अन्य संस्करणों के साथ काम करता है .नेट भी

देखें क्या कोई स्ट्रीमर अपने बेसस्ट्रीम बंद किए बिना बंद करने का कोई तरीका है?

एक और समाधान:

 public static MemoryStream GenerateStreamFromString(string value) { return new MemoryStream(Encoding.UTF8.GetBytes(value ?? "")); } 

इसे एक स्थिर स्ट्रिंग उपयोगिता वर्ग में जोड़ें:

 public static Stream ToStream(this string str) { MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(str); writer.Flush(); stream.Position = 0; return stream; } 

यह एक्सटेंशन फ़ंक्शन जोड़ता है ताकि आप आसानी से:

 using (var stringStream = "My string".ToStream()) { // use stringStream } 
 public Stream GenerateStreamFromString(string s) { return new MemoryStream(Encoding.UTF8.GetBytes(s)); } 

MemoryStream क्लास का प्रयोग करें, Encoding.GetBytes को MemoryStreamMemoryStream को पहली बार बाइट्स की एक सरणी में बदल दें।

क्या आपको बाद में स्ट्रीम पर एक TextReader आवश्यकता है? यदि हां, तो आप सीधे StringReader आपूर्ति कर सकते हैं, और MemoryStream और Encoding चरणों को बायपास कर सकते हैं।

हेयर यू गो:

 private Stream GenerateStreamFromString(String p) { Byte[] bytes = UTF8Encoding.GetBytes(p); MemoryStream strm = new MemoryStream(); strm.Write(bytes, 0, bytes.Length); return strm; } 

मुझे लगता है कि आप MemoryStream का उपयोग करने से लाभ उठा सकते हैं आप इसे एन्कोडिंग क्लास के GetBytes विधि का उपयोग करके प्राप्त स्ट्रिंग बाइट्स से भर सकते हैं।

मैंने इस तरह के उत्तरों का एक मिश्रण प्रयोग किया:

 public static Stream ToStream(this string str, Encoding enc = null) { enc = enc ?? Encoding.UTF8; return new MemoryStream(enc.GetBytes(str ?? "")); } 

और फिर मैं इसका उपयोग इस तरह करता हूं:

 String someStr="This is a Test"; Encoding enc = getEncodingFromSomeWhere(); using (Stream stream = someStr.ToStream(enc)) { // Do something with the stream.... } 

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

 public static class StringExtensions { public static Stream ToStream(this string s) { return s.ToStream(Encoding.UTF8); } public static Stream ToStream(this string s, Encoding encoding) { return new MemoryStream(encoding.GetBytes(s ?? "")); } } 
 /// <summary> /// Get Byte[] from String /// </summary> /// <param name="str"></param> /// <returns></returns> public static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } /// <summary> /// Get Stream from String /// </summary> /// <param name="str"></param> /// <returns></returns> public static Stream GetStream(string str) { return new MemoryStream(GetBytes(str)); } 

स्ट्रिंग एक्सटेंशन का एक अच्छा संयोजन:

 public static byte[] GetBytes(this string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } public static Stream ToStream(this string str) { Stream StringStream = new MemoryStream(); StringStream.Read(str.GetBytes(), 0, str.Length); return StringStream; }