我想为流编写bool StartsWith(string message)
扩展方法。什么是最有效的方式?
答案 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
本身并不意味着它的数据可以解码为字符串表示。如果您确定自己的信息流是,则可以使用上面的扩展名。