从包装的 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 的代码路径中的成本微不足道。
我正在尝试像这样读取压缩的 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 的代码路径中的成本微不足道。