我有一个将流的一部分转换为字符串的函数:
private string GetString(Stream stream, int start, int length)
{
var buffer = new byte[length];
stream.Read(buffer, start, length);
return Encoding.UTF8.GetString(buffer, start, length);
}
我正在处理非常大的流,我不喜欢复制字节(通过将部分流转换为byte []),只是为了能够调用Encoding.GetString
。有没有办法从流中获取某些编码的字符串?
答案 0 :(得分:2)
你要做的事情并不是很清楚 - 而且你在不使用返回值的情况下调用Stream.Read
这一事实令人震惊 - 但也许你正在寻找StreamReader
?它是TextReader
,由Stream
支持,因此您可以从中读取字符而不是二进制数据。如果您从一个完全是文本数据的流中读取(至少从您传递给构造函数时的当前位置读取它;它可能先前有二进制数据),这是合适的。
如果您真的尝试从流的一部分读取数据,那么您的代码无论如何都需要更改 - Stream.Read
不会按照您的想法执行操作第二个参数,即缓冲区中的位置,而不是流中的位置。您需要使用Stream.Position
或Stream.Seek()
才能到达流中的正确位置。