我有一堆文件(大约4000个),每个文件的重量不超过1-5K, 所有这些都是使用Java的序列化机制创建的。
我想压缩它们并通过网络将它们作为单个文件发送。 (他们总共约200-300MB)。
我正在寻找一种方法来提高压缩/解压缩速度,而不会过多地损害文件大小(因为它仍应通过网络发送并存储在服务器中)。
目前使用Apache Ant附带的zip包。 我读到zip文件存储每个文件的元数据,所以我猜这里的zip文件不是最好的选择。
那么什么更好? Gzip / Tar? 还是根本不压缩? 对于这种情况,你会推荐哪个java库?
提前致谢。
答案 0 :(得分:3)
根本不压缩会最快,但最终的文件大小是缺点。
tar.gz生成比zip更小的文件大小的一个原因是gzip可以使用更大的数据缓冲区(整个tar文件),而在你的情况下,zip只能处理来自一个数据的数据文件一次(通常比tar文件的大小少很多,如果有很多文件)。
因此gzip可以一次压缩包含页面章节的整本书,而zip压缩书籍的每一章,然后将压缩的章节包装在书中 - 即压缩的对象集合通常小于集合压缩物体。
要为tar.gz生成类似的结果,您可以使用'store'算法在第一遍中压缩文件,然后使用默认的deflate算法压缩生成的zip文件。
答案 1 :(得分:2)
很大程度上取决于您使用的网络。 如果它通过互联网 - 你可能最好发送50个压缩文件而不是一个文件。如果您将数据传输到一个文件中并且文件复制失败 - 您将不得不再次发送它。
复制为单独的文件将允许您并行传输一些文件,并最大程度地降低大量上传失败的风险。
答案 2 :(得分:0)
另一种可能性可能是切换到另一个序列化机制。 JBoss Serialization兼容API和功能,但产生的数据减少了30%。