我从源接收系统IO流.我将继续使用流对象,只要它包含字符串"MSTND".
我意识到除非我将它转换为字符串,否则我在流上无能为力.字符串转换仅用于子字符串匹配.但我不想做任何占用大量时间或空间的事情.时间/空间密集是如何从Stream转换为字符串仅用于子字符串匹配?
我写的代码是:
private bool StreamHasString (Stream vStream)
{
bool containsStr = false;
byte[] streamBytes = new byte[vStream.Length];
vStream.Read( streamBytes, 0, (int) vStream.Length);
string stringOfStream = Encoding.UTF32.GetString(streamBytes);
if (stringOfStream.Contains("MSTND"))
{
containsStr = true;
}
return containsStr ;
}
Run Code Online (Sandbox Code Playgroud)
小智 1
根据流中您期望此序列的位置,转换为字符串来执行子字符串会相当有效。如果每次都位于标准位置,那么您可以读取所需的字节数并将其转换为字符串。
看一下这个以供参考: http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx
或者,您可以将字符串“MSTND”转换为 byte[] 并在流中搜索 byte[]。
编辑:
我发现如何在 C# 中获得一致的字符串字节表示而不手动指定编码?这应该有助于将字符串转换为 byte[]。