来自Stream的Encoding.GetString

时间:2012-09-25 06:46:42

标签: .net

我有一个将流的一部分转换为字符串的函数:

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。有没有办法从流中获取某些编码的字符串?

1 个答案:

答案 0 :(得分:2)

你要做的事情并不是很清楚 - 而且你在不使用返回值的情况下调用Stream.Read这一事实令人震惊 - 但也许你正在寻找StreamReader?它是TextReader,由Stream支持,因此您可以从中读取字符而不是二进制数据。如果您从一个完全是文本数据的流中读取(至少从您传递给构造函数时的当前位置读取它;它可能先前有二进制数据),这是合适的。

如果您真的尝试从流的一部分读取数据,那么您的代码无论如何都需要更改 - Stream.Read不会按照您的想法执行操作第二个参数,即缓冲区中的位置,而不是流中的位置。您需要使用Stream.PositionStream.Seek()才能到达流中的正确位置。