我最近通过将其作为tar流发送并在我的计算机上压缩来备份即将到期的大学主目录:
这让我想到了一些问题:虽然我只知道压缩的基础知识,但我认为这种压缩数据流的能力会导致较差的压缩效果,因为算法需要在某个点完成处理一个数据块,将其写入输出流并继续到下一个块。
这是真的吗?还是这些程序只是读取大量数据到内存中进行压缩,然后写入,再重复此过程?或者这些“流压缩程序”使用了一些巧妙的技巧?我看到bzip2和xz的手册页面都提到了内存使用情况,bzip2的手册页面还暗示了将要压缩的数据切分成块时很少会有损失:
“较大的块大小会导致迅速递减的边际回报。大部分压缩来自块大小的前两三百k,这一事实值得在小型机器上使用bzip2时注意。同样重要的是要认识到,在压缩时选择块大小会设置解压缩的内存需求。”
我仍然很想知道是否使用了其他技巧,或者在哪里可以阅读更多相关内容。
ssh user@host "tar cf - my_dir/" | bzip2 > uni_backup.tar.bz2
。这让我想到了一些问题:虽然我只知道压缩的基础知识,但我认为这种压缩数据流的能力会导致较差的压缩效果,因为算法需要在某个点完成处理一个数据块,将其写入输出流并继续到下一个块。
这是真的吗?还是这些程序只是读取大量数据到内存中进行压缩,然后写入,再重复此过程?或者这些“流压缩程序”使用了一些巧妙的技巧?我看到bzip2和xz的手册页面都提到了内存使用情况,bzip2的手册页面还暗示了将要压缩的数据切分成块时很少会有损失:
“较大的块大小会导致迅速递减的边际回报。大部分压缩来自块大小的前两三百k,这一事实值得在小型机器上使用bzip2时注意。同样重要的是要认识到,在压缩时选择块大小会设置解压缩的内存需求。”
我仍然很想知道是否使用了其他技巧,或者在哪里可以阅读更多相关内容。
bzip2
这样的压缩程序进行传输,并不意味着小块数据会实时被压缩和发送。你可以轻松地使用一个压缩工具来接收所有发送到它的数据,直到达到文件尾(EOF)为止,然后再进行压缩并发送。 - Rag