猿问

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

我正在编写一个从服务器下载数据并显示它的应用程序。数据包括文本,视频,音频和图片文件。数据以所谓的数据捆绑下载。数据束可以包含所有数据类型的集合,范围从几千字节到几百兆字节不等。数据包太大的原因是视频文件。

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

问题:如果我要传输数据束(大小),哪种压缩算法是最好的选择?Deflate是否足够,还是我应该考虑采用更复杂的方法?


繁星点点滴滴
浏览 204回答 1
1回答

杨__羊羊

首先,我假设您的视频,音频和图像文件已经使用有损算法进行了压缩。在这种情况下,您通常将无法使用其他不同的压缩算法来压缩数据。如果文本数据通常只是整个数据集的一小部分,我认为我根本不会理会应用任何进一步的压缩,因为增加软件的复杂性以获得很小的整体收益是没有道理的。例如,如果您将一个10MB的音频文件与一个5kB的文本文件结合在一起,并且能够将文本压缩到1kB(这可能比您实际实现的要好得多),那么数据包的完整大小只会从10.005MB减少到10.001MB,或减少0.04%。如果文本量通常很高,以至于您可以证明压缩的合理性,则Android使用标准的Android API支持inflate / deflate和gzip。还有用于 bzip2 和 lzma(2) 的 3rd 方 Java 库,我想它们可以在不修改 Android 的情况下编译(不过我还没有尝试过)。Google可以快速搜索到Go的gzip,bzip2和lzma实现。这些算法通常以更高的计算成本和以下内存要求为代价更好地压缩数据:deflate,gzip,bzip2,lzma。特别是lzma编码器/解码器可能需要比Android应用程序实际可用的内存更多的内存。特别是压缩器需要相对更多的内存,而如果您使用较小的字典,则解码器不需要的太多。
随时随地看视频慕课网APP

相关分类

Go
我要回答