StartsWith扩展方法的流

时间:2012-01-21 06:33:18

标签: c# .net

我想为流编写bool StartsWith(string message)扩展方法。什么是最有效的方式?

2 个答案:

答案 0 :(得分:2)

从这样的事情开始......

public static bool StartsWith(Stream stream this, string value)
{
  using(reader = new StreamReader(stream))
  {
    string str = reader.ReadToEnd();
    return str.StartsWith(value);
  }
}

然后优化...我会将此作为练习留给您,StreamReader有各种Read方法,可让您以较小的“块”读取流,以获得更有效的结果

答案 1 :(得分:1)

static bool StartsWith(this Stream stream, string value, Encoding encoding, out string actualValue)
{
    if (stream == null) { throw new ArgumentNullException("stream"); }
    if (value == null) { throw new ArgumentNullException("value"); }
    if (encoding == null) { throw new ArgumentNullException("encoding"); }

    stream.Seek(0L, SeekOrigin.Begin);

    int count = encoding.GetByteCount(value);
    byte[] buffer = new byte[count];
    int read = stream.Read(buffer, 0, count);

    actualValue = encoding.GetString(buffer, 0, read);

    return value == actualValue;
}

当然Stream本身并不意味着它的数据可以解码为字符串表示。如果您确定自己的信息流是,则可以使用上面的扩展名。