不解压压缩包,是否能遍历读取或者计算里边的文件的MD5?
发布于 6 年前 作者 bi-kai 4324 次浏览 来自 问答

处理压缩包,不解压的情况下,是否能遍历里边的文件,比如做读取或者md5计算,就像解压后的一样? 是否有这样的模块呢?

13 回复

你能不解压就读取里面的文件?

首先无论如何,还是得解压才能计算的。如果你了解压缩包结构以及的解压过程,就可以做到。 压缩包有一定的格式,遍历文件肯定没问题。 正常解压每个文件时,都是分块的流式操作,把 解压块写入文件,换成分块计算MD5就可以了。

@fruit-memory 我有非常多的zip和jar,想用代码实现beyondcompare的功能,做不同版本软件包的差分,如果可以不解压性能就能比较高。

@myy 到现在确实没找到能像操作解压后 的文件一样操作未解压的zip包的。 我只是担心zip和jar都解压、用完再删除,会有大量io,导致在win下整体性能低好多。 不知道beyondcompare是如何处理压缩包的,能达到那种速度就是最理想的状态了。

@bi-kai 解压可以直接在内存中进行,而且可以边解压边计算

干嘛不直接对比 zip 的 md5

@MiYogurt 同样的文件,每次打的zip包不是完全相同的。

@bi-kai 你找不到不代表没有。不过能在nodejs中使用可能比较难找, 别的语言大把大把的,java都是内置的库。

@myy 是的,java就有,所以我就想在node中找找 -_-

@MiYogurt maven打包,会加入时间戳

@dislido 有模块可以支持么?还是用原生api?

发现了adm-zip,不解压直接可以读取文件,可以在内存里缓存,实测不限于zip,还支持tar、jar等文件。

对于jar,测试中还是发现了点问题: 用该模块api读取文件和解压后用fs读文件,计算的md5不一致(zip文件没这问题),不知道是不是默认用zip格式缓存到内存的,仍在验证中。

回到顶部