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




unit-testing string (8)

@ जोएलनेट के उत्तर और @ शुन बोवे उत्तर की टिप्पणी में सुझाए गए विस्तार विधियों का थोड़ा संशोधित संस्करण। क्योंकि मैं @ पालेक की टिप्पणी से सहमत हूं।

public static Stream ToStream(this string value) => ToStream(value, Encoding.UTF8);

public static Stream ToStream(this string value, Encoding encoding) => new MemoryStream(encoding.GetBytes(value ?? string.Empty));

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

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

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

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
}

मुझे लगता है कि आप 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 ?? ""));
    }
}

हेयर यू गो:

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

/// <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 Stream GenerateStreamFromString(string s)
{
    return new MemoryStream(Encoding.UTF8.GetBytes(s));
}




stream