Java中可序列化文件的最快压缩

Java中可序列化文件的最快压缩,java,serialization,compression,zip,gzip,Java,Serialization,Compression,Zip,Gzip,我有一堆文件(大约4000个),每个文件的重量大约为1-5K, 所有这些都是使用Java的序列化机制创建的 我想压缩它们并将它们作为单个文件通过网络发送。 (总容量约为200-300MB) 我正在寻找一种方法来提高压缩/解压缩速度,同时又不会对文件大小造成太大影响(因为它仍然应该通过网络发送并存储在服务器中) 目前正在使用ApacheAnt附带的zip包。 我读到zip文件存储每个文件的元数据,所以我猜zip文件不是最好的选择 那么什么更好呢? Gzip/焦油? 还是根本不压缩? 对于这种情况,

我有一堆文件(大约4000个),每个文件的重量大约为1-5K, 所有这些都是使用Java的序列化机制创建的

我想压缩它们并将它们作为单个文件通过网络发送。 (总容量约为200-300MB)

我正在寻找一种方法来提高压缩/解压缩速度,同时又不会对文件大小造成太大影响(因为它仍然应该通过网络发送并存储在服务器中)

目前正在使用ApacheAnt附带的zip包。 我读到zip文件存储每个文件的元数据,所以我猜zip文件不是最好的选择

那么什么更好呢? Gzip/焦油? 还是根本不压缩? 对于这种情况,您建议使用哪种java库


提前感谢。

完全不压缩会是最快的,但产生的文件大小是不利的

tar.gz产生的文件大小比zip小的一个原因是gzip可以处理更大的数据缓冲区(整个tar文件),而在您的情况下,zip一次只能处理一个文件中的数据(如果有很多文件,通常比tar文件小很多)

因此gzip一次压缩一整本书的章节,而zip压缩一本书的每一章,然后将压缩的章节打包到一本书中,也就是说,压缩的对象集合通常比压缩的对象集合小


要生成与tar.gz类似的结果,您可以在第一次压缩时使用“store”算法对文件进行压缩,然后使用默认的deflate算法对生成的压缩文件进行压缩。

完全不压缩将是最快的,但生成的文件大小是不利的

tar.gz产生的文件大小比zip小的一个原因是gzip可以处理更大的数据缓冲区(整个tar文件),而在您的情况下,zip一次只能处理一个文件中的数据(如果有很多文件,通常比tar文件小很多)

因此gzip一次压缩一整本书的章节,而zip压缩一本书的每一章,然后将压缩的章节打包到一本书中,也就是说,压缩的对象集合通常比压缩的对象集合小


要生成与tar.gz类似的结果,您可以使用“存储”算法在第一遍压缩文件,然后使用默认的deflate算法压缩生成的压缩文件。

很大程度上取决于您使用的网络。 如果是在互联网上,你最好发送50个压缩文件,而不是一个文件。如果在一个文件中传输数据,而文件副本失败,则必须再次发送


作为单独的文件复制将允许您并行传输一些文件,并将大型上载失败的风险降至最低。

很大程度上取决于您使用的网络。 如果是在互联网上,你最好发送50个压缩文件,而不是一个文件。如果在一个文件中传输数据,而文件副本失败,则必须再次发送


作为单独的文件复制将允许您并行传输一些文件,并将大型上载失败的风险降至最低。

另一种可能是切换到另一种序列化机制。JBoss序列化与API和功能兼容,但生成的数据减少了30%。

另一种可能是切换到另一种序列化机制。JBoss序列化与API和功能兼容,但生成的数据减少了30%。

GZIP对亚马逊、雅虎来说已经足够好了!,还有谷歌。为什么这对你来说还不够好?如果压缩和解压缩时间没有消耗掉您所节省的时间,那么压缩将是有意义的。运行一个(或多个)测试,看看是否正确。做一个实验主义者。相信我,10年后亚马逊和谷歌将不会在其内部基础设施中使用gzip(当然,由于每个设备上几乎都支持gzip,因此它将始终保持合理的外部格式)。10年后的雅虎?heh.GZIP对亚马逊、雅虎来说已经足够好了!,还有谷歌。为什么这对你来说还不够好?如果压缩和解压缩时间没有消耗掉您所节省的时间,那么压缩将是有意义的。运行一个(或多个)测试,看看是否正确。做一个实验主义者。相信我,10年后亚马逊和谷歌将不会在其内部基础设施中使用gzip(当然,由于每个设备上几乎都支持gzip,因此它将始终保持合理的外部格式)。10年后的雅虎?呵呵。