我最近备份了我即将到期的大学主目录,将其作为 tar 流发送并在我的一端压缩:ssh user@host "tar cf - my_dir/" | bzip2 > uni_backup.tar.bz2
.
这让我开始思考:我只知道压缩如何工作的基础知识,但我想这种压缩数据流的能力会导致压缩效果更差,因为算法需要在某一时刻完成处理一个数据块,写这个到输出流并继续到下一个块。
是这样吗?还是这些程序只是简单地将大量数据读入内存,压缩它,写入它,然后再做一遍?还是在这些“流压缩器”中使用了任何巧妙的技巧?我看到bzip2和xz的手册页都讨论了内存使用情况,并且man bzip2还暗示了将要压缩的数据切成块的损失很少:
较大的区块大小会导致边际收益迅速递减。大多数压缩来自前两三百 k 的块大小,在小型机器上使用 bzip2 时需要牢记这一点。同样重要的是要理解解压缩内存要求是通过选择块大小在压缩时设置的。
我仍然很想知道是否使用了其他技巧,或者我可以在哪里阅读更多关于此的信息。