返回顶部
首页 > 资讯 > 精选 >Android数据压缩的方法是什么
  • 618
分享到

Android数据压缩的方法是什么

2023-07-05 07:07:14 618人浏览 安东尼
摘要

本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 前言在开发中我们难免

本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1. 前言

开发中我们难免会碰到传输的数据太大,或者传输的资源过大,所以就出现了数据压缩这项技术,现在存在很多种数据压缩的算法,每种算法都有自己的特点和使用场景,这次就想简单来聊聊关于数据压缩这件事。

为什么会想到这个问题,因为碰到了一些场景,我不知道是大家对数据压缩这个概念太模糊不敢去使用,还是因为深思熟虑觉得影响性能太大不想用。我这有个需求,给链接拼接参数,然后跳转这个链接,另外一边从中拿到拼接的参数,其实就是get请求,但是,现在的情况是拼接后的链接又臭又长,就是url?a=xxx&b=xxx&c=xxx......这种,然后就疯狂往后面拼参数。把整个对象拆了往后面拼。那为何不把对象转成json然后压缩呢?

是觉得字符串不能压缩?还是设计时没有意识到还有压缩这事?还是觉得你几十年的开发直觉告诉你使用压缩会出大问题。

2. 关于压缩这件事

首先什么是数据压缩?举个简单的例子,我把AAABBBCCC这个字符串变成3A3B3C,就是一种压缩的思想。

写个Demo演示一下java使用Deflater对字符串进行压缩

public class Test {    public static String compress(String str) {        Deflater deflater = new Deflater(Deflater.BEST_COMPRESSioN);        deflater.setInput(str.getBytes());        deflater.finish();        final byte[] bytes = new byte[256];        ByteArrayOutputStream bos = new ByteArrayOutputStream(256);        while (!deflater.finished()) {            int length = deflater.deflate(bytes);            bos.write(bytes, 0, length);        }        deflater.end();        String result = Base64.encodeToString(bos.toByteArray(), Base64.NO_PADDING);        Log.v("mmp", "压缩后结果" + result);        return result;    }}

在外部调用

String str = "ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE";String result = Test.compress(str);

可以看到结果
压缩后结果eNpzdHJ2cXUkhQAATY4NFw

看得出压缩前和压缩后的一个明显的效果。

有人看到这个可能就想到,哦,原来用Base64压缩,这是一个误区,有一定开发经验或者一定基础的朋友都知道,但是可能一些萌新不太熟,我前面也写过了,Base64不是压缩,是一种编码,如果你纯用Base64的话,它只会变得更长。

那为什么还要在这里用Base64呢?Base64是为了将字节数组转成字符串,数据压缩和解压的对象是字节数组,所以压缩可以对字符串压缩,也可以对文件压缩,因为它是针对byte[]

有的人就会说,懂了,那简单,那我图片和视频的压缩也用Deflater。这东西还真不一样,压缩又分为有损压缩和无损压缩,我们上面使用Deflater进行的压缩是无损压缩,是可逆的,而图片和视频的压缩往往会用有损压缩比较多,特别是视频,压缩率很高,因为有损压缩能把数据压得更小,相对得它是不可逆的。所以对数据和资源要使用哪种压缩方式要看具体的场景。比如这里的对字符串压缩,要是使用有损的方式,那解压出来的字符串不就和原字符串内容不同了吗。

相信看到这里,你已经对数据的压缩这个概念有个大概的了解。

3. Deflater算法

前面有说到数据压缩的算法有很多种,甚至你也可以自己设计出一套算法,然后写专利。而Deflater算法是一种常用的数据无损压缩算法。

可以很容易的找到Deflate压缩算法=LZ77+哈夫曼编码,意思是这套算法内部的实现原理就是使用LZ77和哈夫曼编码。

我这边暂时先不讲这些算法的实现过程和原理,因为内容也是比较多,如果以后有时间单独拿出来写,并且手写一遍用代码去实现这些算法(一般都是用C写) ,这里就只简单介绍一下,有个概念就行。

LZ77

LZ77编码是一种基于字典的、“滑动窗”的无损压缩算法。

简单来说就是滑动的过程中,把前面的子串放到字典中,滑动到后面发现相同的子串时只需要替换成子串的位置和长度的信息进去就行。

例如ABCDEFABCDZZZ → ABCDEF(6,4)ZZZ
意思是往前第6个,长度为4。

当然这只是简单的一个体现思路的例子,实际中肯定没有这么简单,比如子串怎么找啊,滑动怎么滑等等之类的。

哈夫曼编码

哈夫曼编码,又涉及到哈夫曼树,贪心算法。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字。

因为这个要根据字符出现的频率构建哈夫曼树,不好简单易懂的演示出来,这里就拿一个别人写的Demo来直接演示效果。

原字符串:BCAADDDCCACACAC

转成二进制后:

10000100100001101000001010000010100010001000100010001000100001101000011010000010100001101000001010000110100000101000011

编码后:1000111110110110100110110110

能看出压缩的效果很明显。

小结

Deflater算法是一种常用的数据压缩算法,其内部是使用LZ77和哈夫曼编码。压缩算法一般都具备平台无关性,它是一种计算,一种思想,java使用的是Deflater这个类,PHP也有对应的库,Go也有对应的库。甚至当你知道了它的原理之后,你也能自己把实现过程给写出来,当然这很麻烦,毕竟涉及算法还是有一定难度。所以一般在开发中你得知道有这么一个东西,它是干嘛的,怎么使用。当然最好还是能知道它的原理,知道它怎么实现的,这并不是毫无作用,当你去学之后,你一定能收获到一些东西。

可以再扩展一下,像图片的质量压缩,就是一种有损压缩的方式,像视频的H264编码,H265编码等,也是一个有损的过程。要心里有个底,对这个数据进行操作,是否需要可逆,是否是针对它的大小,可逆就用无损压缩的算法,为了极致的压缩大小又无所谓不可逆,那就用有损压缩的算法。对数据的传输是否要安全,全都无所谓就明文传输最快,对其大小有要求就压缩,要求安全就加密。开发就这么简单!

GZIP

GZIP也是一种压缩技术,相信很多人都听说过。我们的Http请求头中可以配置content-encoding为gzip,那么服务端返回的数据就是经过gzip压缩过之后的数据。那有什么用呢?你文件大,字节数多,传输的速度就慢,我经过gizp压缩之后,压缩率高,传输的字节数少很多,那传输的速度就快。

有的人也会说,那你压缩可解压也是耗时间的啊。说得好,这种我建议你不要信什么原理,直接去实践,去试试使用GZIP压缩和不使用韩国,谁得速度更快。当然数据量大的情况下去测。你会发现哪怕我经过压缩和解压,也比你直接传输的速度更快。

读到这里,这篇“Android数据压缩的方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Android数据压缩的方法是什么

本文链接: https://lsjlt.com/news/350378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android数据压缩的方法是什么
    本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 前言在开发中我们难免...
    99+
    2023-07-05
  • C#压缩Access数据库的方法是什么
    这篇文章主要介绍“C#压缩Access数据库的方法是什么”,在日常操作中,相信很多人在C#压缩Access数据库的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#压缩Access数据库的方法是什么...
    99+
    2023-06-17
  • Hadoop中的压缩与解压缩方法是什么
    这篇文章主要介绍“Hadoop中的压缩与解压缩方法是什么”,在日常操作中,相信很多人在Hadoop中的压缩与解压缩方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hadoop中的压缩与解压缩方法是什么...
    99+
    2023-06-21
  • MongoDB数据压缩与存储优化方法是什么
    MongoDB 数据压缩与存储优化方法主要有以下几种: 使用文档压缩:MongoDB 支持利用压缩算法来减小文档在磁盘上的存储空...
    99+
    2024-05-07
    MongoDB
  • 在线sql压缩的方法是什么
    在线SQL压缩的方法通常包括以下几种: 使用数据库管理工具:一些数据库管理工具如Navicat等提供了在线SQL压缩的功能,用户...
    99+
    2024-03-06
    sql
  • Python文件的压缩与解压方法是什么
    本篇内容介绍了“Python文件的压缩与解压方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:Python在人工智能,后台服务等...
    99+
    2023-06-30
  • 压缩MySQL数据文件的方法
    这篇文章主要介绍“压缩MySQL数据文件的方法”,在日常操作中,相信很多人在压缩MySQL数据文件的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”压缩MySQL数据文件的...
    99+
    2024-04-02
  • json字符串压缩的方法是什么
    将JSON字符串压缩的方法可以通过以下步骤实现: 移除所有空格和换行符:可以使用正则表达式或字符串替换方法将所有空格和换行符删除。...
    99+
    2024-03-01
    json
  • ubuntu压缩文件夹的方法是什么
    在Ubuntu中,可以使用以下方法来压缩文件夹: 使用zip命令:可以使用以下命令将文件夹压缩为一个zip文件: zip -r ...
    99+
    2024-04-02
  • Android实现zip文件压缩及解压缩的方法
    本文实例讲述了Android实现zip文件压缩及解压缩的方法。分享给大家供大家参考。具体如下: DirTraversal.java如下: package com.once; ...
    99+
    2022-06-06
    压缩 方法 zip 解压 Android
  • windows中psd文件压缩的方法是什么
    这篇文章主要介绍“windows中psd文件压缩的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows中psd文件压缩的方法是什么”文章能帮助大家...
    99+
    2023-01-29
    windows
  • windows中winrar分卷压缩的方法是什么
    本文小编为大家详细介绍“windows中winrar分卷压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“windows中winrar分卷压缩的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-04
  • python读取压缩文件的方法是什么
    Python中读取压缩文件的方法通常是使用相关的库来解压缩文件,然后再读取文件内容。常用的库有zipfile和tarfile。 使...
    99+
    2024-03-06
    python
  • sql在线压缩文件的方法是什么
    SQL数据库不支持直接压缩和解压文件,因为其主要职责是存储和管理数据。然而,你可以使用一些其他方法来在SQL中实现压缩和解压文件的功...
    99+
    2024-04-09
    sql
  • android中gzip数据压缩与网络框架解压缩
    目录theme: smartblue开GZIP有什么好处?Java中gzip压缩和解压实现字节流压缩:字节流解压:网络框架解压缩(gzip)使用步骤:构造消息发送类(post调用的对...
    99+
    2022-11-13
    android gzip数据压缩解压缩 android gzip 网络框架解压
  • server通过脚本进行数据库压缩全备份的方法是什么
    server通过脚本进行数据库压缩全备份的方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。问题:生产环境的数据库可能比较大,如果直接进...
    99+
    2024-04-02
  • kafka数据积压排查的方法是什么
    要排查Kafka数据积压的情况,可以使用以下方法:1. 监控Kafka的指标:通过监控Kafka的指标,如消息堆积数量、消息处理速度...
    99+
    2023-09-14
    kafka
  • Redis怎么实现数据的压缩和解压缩
    Redis可以通过以下方式实现数据的压缩和解压缩: 使用Redis的压缩功能:Redis可以通过配置选项来启用对数据的压缩功能。...
    99+
    2024-05-07
    Redis
  • android中gzip数据压缩与网络框架解压缩怎么实现
    这篇“android中gzip数据压缩与网络框架解压缩怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“android中...
    99+
    2023-07-04
  • Android 图片压缩并保存的方法
    参考:     1.https://blog.csdn.net/pbm863521/article/details/74391787     2.https://www.jia...
    99+
    2022-06-06
    压缩 方法 图片 图片压缩 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作