StartsWith流的扩展方法

本文关键字:方法 扩展 StartsWith | 更新日期: 2023-09-27 18:21:11

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

StartsWith流的扩展方法

从以下内容开始。。。

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

然后优化。。。我将把这作为一个练习留给你,StreamReader有各种读取方法,可以让你以更小的"块"读取流,以获得更有效的结果。

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本身并不意味着它的数据可以解码为字符串表示。如果你确定你的流是,你可以使用上面的扩展