Java 如何使用数据压缩将数据从服务器传输到Android设备?

Java 如何使用数据压缩将数据从服务器传输到Android设备?,java,android,compression,zip,go,Java,Android,Compression,Zip,Go,我正在编写一个从服务器下载数据并显示的应用程序。数据包括文本、视频、音频和图片文件。数据被下载到所谓的数据包中。一个数据包可以由所有数据类型的集合组成,从几千字节到几百兆字节不等。数据包过大的原因是视频文件 服务器是用Go编写的,应用程序是用Java(Android)编写的 问题:如果我想传输数据包(大小),哪种压缩算法是最好的方法?是否足够通透,还是应该考虑更复杂的方法? < P>首先,我假设你的视频、音频和图像文件已经用有损算法压缩了。在这种情况下,通常无法使用其他不同的压缩算法来压缩数据(

我正在编写一个从服务器下载数据并显示的应用程序。数据包括文本、视频、音频和图片文件。数据被下载到所谓的数据包中。一个数据包可以由所有数据类型的集合组成,从几千字节到几百兆字节不等。数据包过大的原因是视频文件

服务器是用Go编写的,应用程序是用Java(Android)编写的


问题:如果我想传输数据包(大小),哪种压缩算法是最好的方法?是否足够通透,还是应该考虑更复杂的方法?

< P>首先,我假设你的视频、音频和图像文件已经用有损算法压缩了。在这种情况下,通常无法使用其他不同的压缩算法来压缩数据(很多)。如果文本数据通常只是整个数据包中的一小部分,我想我根本不会费心应用任何进一步的压缩,因为为软件增加复杂性以获得非常小的总体收益是不合理的。例如,如果您将10MB音频文件与5kB文本文件相结合,并且能够将文本压缩到1kB(这可能比实际情况要好得多),那么数据包的完整大小将仅从10.005MB减少到10.001MB,即减少0.04%

如果文本量通常很高,您可以证明压缩是合理的,Android支持使用标准Android API进行充气/放气和gzip。bzip2和lzma(2)也有第三方Java库,我认为它们可以在不修改Android的情况下编译(我还没有尝试过)。谷歌快速搜索也可以找到Go的gzip、bzip2和lzma实现


这些算法通常以更高的计算成本和内存需求为代价更好地压缩数据,按以下顺序排列:deflate、gzip、bzip2、lzma。尤其是lzma编码器/解码器可能需要比Android应用程序实际可用的内存更多的内存。尤其是压缩器需要相对较多的内存,如果使用较小的字典,解码器就不会占用太多内存。

好的,关于数据大小,在我的例子中,压缩基本上是无用的。但还有一个后续问题:有没有更好(更容易)的方式来传输数据包,而不必执行多个WebRequest?或者,恰恰相反,由于并发优势,在多个webrequests中获取数据会更好吗?