把一堆照片和视频打包成 zip,体积几乎没变;换成 7z,也只小了一点点。折腾半天,省下的还不够一个零头。
这不是软件不行,而是 JPEG 和 MP4 本身已经是压缩格式,没有多少冗余可挤。压缩工具做的是找重复和规律,找不到就只能原样存。
压缩在找什么:冗余
无损压缩的本质是“用更短的编码表示重复出现的模式”。文本里反复出现的单词、空格、标签,表格里成片的相同值,未压缩图片里相邻像素的高度相似,都能被 LZ77、Huffman、算术编码压掉。
一个直观判断:文件如果是“给人看的原始数据”,通常能压;如果是“给播放器或解码器看的成品”,基本压不动。
- 压得动:txt、log、csv、json、xml、源代码、BMP/TIFF 未压缩图、WAV、数据库导出文件
- 压不动:JPEG、PNG、WebP、MP4/H.264、MP3/AAC,以及已经是 zip/7z/rar 的包
- 可能变大:已压缩文件,加上大量小文件——每个文件都有头部和目录开销
zip、7z、rar、tar.gz 差在哪
选择原则:发给别人用 zip;自己存档、追求体积用 7z;Linux 服务器上用 tar.gz。
- zip:兼容性最好,Windows 和 macOS 原生支持;Deflate 算法,压缩率中等,能快速随机读取单个文件
- 7z:LZMA2 算法,文本类通常比 zip 再小 10%~30%,但压缩慢,老系统需要装软件
- rar:压缩率和 7z 接近,但需要商业软件,跨平台支持一般
- tar.gz:Linux 世界的事实标准,先打包再 gzip,处理大量小文件的元数据不如 zip 高效
固实压缩:省体积,牺牲随机访问
固实(solid)压缩把多个文件连成一条数据流再压,好处是跨文件复用重复内容——一堆相似的文档能再省一截;代价是解压某个文件时,必须先解开它前面的数据。
- 适合:一次性归档、备份、大量相似的小文件
- 不适合:需要频繁单独取用某个文件、需要快速预览的包
- 7z 格式通常默认按固实方式压缩;zip 不支持真正的固实压缩
分卷不是压缩,是切块
分卷把一个大包切成固定大小的多个文件,比如 backup.7z.001、backup.7z.002。它解决的是传输和存储限制:邮件附件上限、U 盘容量、FAT32 单文件 4GB 限制、网盘单文件限制。
- 分卷后总体积不会变小,通常还略大
- 必须集齐所有分卷才能解压,缺一个就失败
- zip 分卷常见 .z01/.z02 加 .zip;7z 是 .7z.001、.7z.002
- 跨平台兼容性 zip 最好,7z 需要对应软件
站内压缩与解压的能力边界
站内压缩支持 zip 和 tar.gz 两种目标格式,单文件上限 100MB、最多 20 个文件,打包时不提供压缩级别选项;解压支持 zip/jar/tar/tgz/gz/7z/rar,解压总量上限 512MB、条目上限 10000。
- 带密码的压缩包暂不支持,需要先在本地解密再上传
- 打包时同名文件自动加序号,不会互相覆盖
- 需要批量右键压缩、解压或预览包内容,用桌面端的压缩王更顺手
加密和压缩的顺序
加密会把数据变成接近随机的密文,这一步之后再做压缩基本没有收益。所以顺序永远是先压缩、后加密。
- zip 的传统加密(ZipCrypto)强度弱,敏感数据用 AES-256 或 7z 的加密
- 忘记密码的找回难度取决于算法:ZipCrypto 最弱,rar5 和 7z 很强
- 重要资料别只依赖压缩包密码,密码本身要另存一份
常见问题
为什么 7z 压视频也没小多少?
视频编码已经去掉了时间和空间冗余,剩余数据熵很高,再压收益接近零。这类文件要减小体积,只能降码率、降分辨率或剪短。
zip 一般能压到多小?
没有固定比例。纯文本可能压到原体积的 20%~40%,已压缩媒体接近 100%,混合内容介于两者之间,取决于数据里有多少重复。
分卷包少一个还能解压吗?
不能。分卷是完整数据流的分片,缺任何一卷都无法还原,哪怕缺的是最后一卷。