V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
opency
V2EX  ›  程序员

如何实现一个压缩追加的功能?求大佬们给点思路

  •  
  •   opency · 2022-01-18 17:49:20 +08:00 · 2218 次点击
    这是一个创建于 800 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平时开发会有部分场景都是需要压缩,但是每次有新增时就要重新进行压缩,所以就想着是不是能够向一个压缩包中追加文件来节约性能。目前网上的文章都搜不到,特来此寻求帮助(花花)

    16 条回复    2022-01-19 16:19:29 +08:00
    matrix67
        1
    matrix67  
       2022-01-18 17:57:32 +08:00   ❤️ 1
    tar archive
    tar extension, you can use the -r (or –append) option of the tar command to add/append a new file to the end of the archive. You can use the -v option to have a verbose output to verify the operation. The other option that can be used with the tar command is -u (or –update).Jun 8, 2013
    wangxn
        2
    wangxn  
       2022-01-18 17:58:52 +08:00   ❤️ 1
    ZIP/RAR 这些格式默认就支持往里边添加或者删除文件吧。
    像 LZMA 或者 RAR 的固实压缩就不行,算法差异。
    opency
        3
    opency  
    OP
       2022-01-18 18:03:16 +08:00
    @matrix67
    @wangxn
    感谢解答
    ruanimal
        4
    ruanimal  
       2022-01-18 19:49:17 +08:00
    @matrix67 tar 不是打包吗,没有压缩功能吧,tar.gz 的话估计也是全量压的
    kokutou
        5
    kokutou  
       2022-01-18 19:54:01 +08:00 via Android
    就一直压到新的压缩包里吧,然后给个功能,手动重压缩打包。
    ysc3839
        6
    ysc3839  
       2022-01-18 19:55:40 +08:00 via Android
    @wangxn @ruanimal gz 和 lzma 是流式压缩的,理论上可行吧?
    yfugibr
        7
    yfugibr  
       2022-01-18 19:57:30 +08:00 via Android   ❤️ 1
    .zip.tar
    对每个部分独立压缩,再拼起来
    jim9606
        8
    jim9606  
       2022-01-18 20:57:02 +08:00   ❤️ 1
    zip 就可以,很多 zip 读写库都支持在线修改,追加和修改都可以(但删除就不一定支持了)
    另外友情提醒,zip 的压缩算法除了 store(不压缩)和 deflate 外还能用 lzma ,甚至可以用牛逼的 zstd (好像已经被 PKWARE 标准化,至少 7-zip 可以创建这种 zip 档案)
    aloxaf
        9
    aloxaf  
       2022-01-18 21:18:31 +08:00
    本来还是为是往已压缩文件中追加数据,没想到是往压缩包内追加完整文件

    ——只要你没在用 tar ,那么只要关闭「固实压缩」,就能避免在追加内容时重新压缩
    Izual_Yang
        10
    Izual_Yang  
       2022-01-18 23:49:58 +08:00
    差量备份?
    或者就干脆新增 /修改部分另压新包?
    zhangenming
        11
    zhangenming  
       2022-01-19 00:31:15 +08:00
    增量压缩 结果肯定没有 重新做一次完整压缩 的压缩效率高吧
    增量的时候字典应该也是增量的
    mingl0280
        12
    mingl0280  
       2022-01-19 00:35:24 +08:00
    固实压缩不可追加,除此之外都可以追加。
    Trim21
        13
    Trim21  
       2022-01-19 00:36:40 +08:00 via Android
    zip 文件就可以,每次追加文件只需要重写文件尾很小的一部分内容,写完了所有要添加的文件再写一个新的文件尾。
    DiamondYuan
        14
    DiamondYuan  
       2022-01-19 01:32:12 +08:00 via iPhone
    这个我熟。之前读了 tar 和 gzip 的 rfc 。

    1. gzip 文件可以任意合并

    可以把一个大文件拆分成两个文件,分别压缩后拼起来,解压后就是原来的大文件

    2. 任意的两个 tar 文件可以直接连接起来。a.tar 和 b.tar (需要删除 a.tar 末尾的空白即可)



    利用上面的原理,每次只需要

    1. tar 打包文件
    2. 去掉末尾空白
    3. gzip

    以后,就可以追加到之前的压缩包了
    iqoo
        15
    iqoo  
       2022-01-19 10:36:54 +08:00
    任何流压缩都支持。比如网站 gzip/br 就是边压缩边返回的。

    想同时满足压缩率的话,设置一个较大的窗口,缓冲区写满才压缩追加。
    alexsunxl
        16
    alexsunxl  
       2022-01-19 16:19:29 +08:00
    @matrix67 tar 只是打包,不是压缩。把多个小文件归档成一个 tar 包。
    一般配合 zip br gz ,归档后压缩。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   974 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.