我最近备份了即将到期的大学主目录,将它作为焦油流发送并在我的末端进行压缩:ssh [email protected] "tar cf - my_dir/" | bzip2 > uni_backup.tar.bz2
。压缩流的能力如何影响压缩算法?
这让我想到:我只知道压缩是如何工作的基础知识,但我会想象,压缩数据流的这种能力会导致较差的压缩,因为算法需要在一个时间内完成处理一块数据点,将其写入输出流并继续到下一个块。
这是这种情况?或者,这些程序是否只是将大量数据读入内存压缩,写入,然后再重新执行一次?还是在这些“流式压缩机”中使用了巧妙的技巧?我看到,无论的bzip2和XZ的手册页谈论内存使用情况,并人的bzip2也暗示一个事实,即小是失去了对砍的数据被压缩成块:
规模越大,边际收益就越快递减。大部分压缩来自块大小的前两三百k,在小型机器上使用bzip2时值得注意。认识到解压缩内存要求是在压缩时间通过选择块大小来设置也很重要。
我仍然很想听听是否使用了其他技巧,或者我可以在哪里阅读更多关于此的信息。
好问题;我只想指出,通过诸如'bzip2'之类的压缩程序管道化数据流并不一定意味着实时压缩和发送小块数据。您可以轻松拥有一个压缩实用程序,该实用程序可以消除发送给它的所有数据,直到达到EOF,然后才压缩并将其发送。 –
我不希望bzip2在开始写输出的第一个字节之前分析几个数据集。这可能会节省几个字节的最终大小,但我们都希望性能。但是,我也喜欢你的问题。 –