使用 ZipArchiveMode.Read 时,ZipArchive 中的第一个读取条目是不可查找的?

问题描述 投票:0回答:1

调用

ZipArchive.Entries[1]
读取第二个条目则没有这样的问题。基本上
ZipArchive.Entries[0].Open()
返回的流似乎始终是一个没有查找功能的 deflate 流?

这正常吗?还是有其他事情发生?

当我尝试读取第一个返回条目流的

InvalidOperationException
属性时,会抛出
Position
。接下来的条目没有这样的问题。

c# .net .net-core zip .net-8.0
1个回答
0
投票

缩小没有搜索功能的流?

这正常吗?还是有其他事情发生?

这是正常现象。返回的流将在读取数据时解压缩数据。

数据压缩是为了减少数据中的冗余,这本质上使得查找变得非常困难。如果您有“1111111000000000”,则可以将其替换为“1709”,即重复“1”七次,然后重复“0”九次。但如果我想知道数字十的值,你需要从头开始。

有一些格式是专门为半随机访问而设计的。视频压缩以“块”为单位进行工作,并通过索引来跟踪每个块的开始位置。因此,如果您跳转到某个随机时间,您只需要从该块的开头解压缩,而不是从整个视频的开头解压缩。

在您的情况下,您需要将 deflate 流复制到 do 支持查找的某个流,例如文件流的内存流。然后你就可以随心所欲地寻找了。

© www.soinside.com 2019 - 2024. All rights reserved.