1

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

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);
}

我正在使用相当大的流,我不喜欢复制字节(通过将流的一部分转换为字节 [])只是为了能够调用Encoding.GetString. 有没有办法从流中获取一些编码的字符串?

4

1 回答 1

2

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

如果您真的想从流的一部分中读取数据,那么您的代码无论如何都需要更改 -Stream.Read就第二个参数而言,它不会按照您认为的那样做,它是缓冲区中的位置,而不是内部的位置流。您需要使用Stream.PositionStream.Seek()到达流中的正确位置。

于 2012-09-25T06:48:30.353 回答