从包装的 GZipStream 中读取

Reading from wrapped GZipStream

我正在尝试像这样读取压缩的 gzip 数据:

using (var input = new BinaryReader(new GZipStream(fileStream, CompressionMode.Decompress))) 
{
    while(input.PeekChar() != -1)
    {
        //use BinaryReader methods I need
    }
}

但是 GZipStream CanSeek 属性 总是 false,所以 input.PeekChar() 总是 -1.
我不想直接使用 GZipStream。我无法读取整个文件,因为它可能太大了。我无法按字节数组读取,因为我之后解析数据所以有些字节不能拆分,必须一起解析。
有没有一种方法可以使用 BinaryReader 来确定 eof 是否发生而不捕获异常?

Is there a way to determine if eof occured using BinaryReader without catching exception?

不太好。从技术上讲,您可以将 GZipStream 包装在支持使用小缓冲区进行搜索的自定义流中。但这不值得付出努力。

捕获异常在执行 IO 的代码路径中的成本微不足道。