程序性能优化之网络传输与数据存储优化(五)下

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

本篇文章将继续从7Z极限压缩和WebP使用来介绍网络传输与数据存储优化:

一、7Z极限压缩

一些文件过大或者是容量太大了,占用硬盘太多空间了。此刻可以使用压缩软件进行压缩,让它的体积变小了。其中极限压缩可以让文件夹或者是文件,压缩的最小。那么如何使用这个极限压缩功能的。

?

1、你要到网上下载这个压缩的程序,点击它,点击【install】。

?

?

2、此刻软件会安装到电脑,找到需要压缩的文件以及文件夹。

?

?

3、右键文件或者文件夹选择这个7z,选择压缩包,点击这个压缩等级这里。

?

?

4、选择这个极限压缩,然后压缩算法选择【LZMA2】。

?

?

5、然后点击这个确定,软件将会以极限压缩的方式进行压缩的。压缩后的文件明显变小了的。

?

?

二、WebP使用 图片优化

2.1、什么是 WebP?

WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28%的文件大小。

2.2、当下Android图片优化之WebP的必然选择

对于一个好的APP,当然是越小越好,然而,在APP中图片就占据了很大的一部分体积,所以图片的优化是开发人员必须要做的事情,而原有图片的png、jpeg、GIF等格式的优化已经达到了极致,所以只得另寻出路,因此有了WebP。由于WebP的特性,如果把WebP运用到APP中将会使我们的APP体积大小得到很大程度的缩小,APP也会得到一个质的变化,所以,WebP在APP中的使用将是目前我们图片优化的不二选择。

2.3、WebP的转换

WebP的转换:WebP与其他常用的图片格式之间是可以相互转换的,webp转换工具有:XnConvet,智图,ISparta.

2.4、WebP的兼容性

WebP的兼容性:4.2.1+ 对于webp的decode、encode是完全支持的(包含半透明的webp图)对于4.0+ 到 4.2.1 ,只支持完全不透明的decode、encode的webp图,4.0 以下,应该是默认不支持webp的(编码解码)。

2.5、Android下WebP的使用

想在APP中使用WebP,首先我们就得解决它的兼容性问题。步骤如下:

1、添加webp的支持,加载so文件,添加libwebp.jia包

(1)获取so文件和libwebp.jia包:可以从https://github.com/EverythingMe/webp-android下载解析库,然后ndk-build得到so文件。同时也能在解析库里面得到libwebp.jia包。

(2)得到so文件和libwebp.jia后拷到项目的app的libs目录下。

?

(3)在appbuild添加依赖。

?

添加成功后在app目录下会生成这样的一个文件。

?

自此 so文件添加依赖成功。

2、第二步,添加WebpUtils文件,里面有通过so包来处理webp文件成为byte数组的方法。

我们可以通过以下方法来解决兼容性问题(4.2.1以下版本也可以显示webp格式图片,包括半透明图片)。

关键代码:

**public class **WebPDecoder {
    **private static **WebPDecoder *instance *= **null**;

    **private **WebPDecoder() {
        System.*loadLibrary*(**"webp_evme"**);
    }

    **public static **WebPDecoder getInstance() {
        **if **(*instance*==**null**) {
            **synchronized **(WebPDecoder.**class**) {
                **if **(*instance*==**null**) {
                    *instance *= **new **WebPDecoder();
                }
            }
        }

        **return ***instance*;
    }

    **public **BitmapdecodeWebP(**byte**[] encoded) {
        **return **decodeWebP(encoded,0,0);
    }

    **public **BitmapwebpToBitmap(InputStream is) {
        Bitmap bitmap = **null**;
        **if **(Build.VERSION.***SDK_INT***< Build.VERSION_CODES.***JELLY_BEAN_MR1***) {
            bitmap = WebPDecoder.*getInstance*().decodeWebP(*streamToBytes*(is));
        } **else **{
            bitmap = BitmapFactory.*decodeStream*(is);
        }
        **return **bitmap;
    }

    **private static byte**[] streamToBytes(InputStream is) {
        ByteArrayOutputStream os = **new **ByteArrayOutputStream(1024);
        **byte**[]buffer = **new byte**[1024];
        **int **len;
        **try **{
            **while **((len= is.read(buffer)) >=0) {
                os.write(buffer, 0, len);
            }
        } **catch **(java.io.IOExceptione) {
        }
        **return **os.toByteArray();
    }

3、项目里在需要的地方直接调用

final ImageView imageView = (ImageView) findViewById(R.id.imageView);
try {
    imageView.setImageBitmap(WebPDecoder.getInstance().webpToBitmap(getAssets().open("aa.webp")));
} catch (IOException e) {
    e.printStackTrace();
}

参考:https://blog.csdn.net/qq_34075348/article/details/78750974
https://jingyan.baidu.com/article/93f9803f4b6055e0e46f55b1.html

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

原文地址:https://www.cnblogs.com/Android-Alvin/p/11958921.html

时间: 2024-08-18 21:33:51

程序性能优化之网络传输与数据存储优化(五)下的相关文章

关于此主机当前没有管理网络冗余及数据存储数目为0的问题

此主机当前没有管理网络冗余VMware vSphere 5.0配置完成Cluster的HA后在主机的摘要栏提示“此主机当前没有管理网络冗余”,我的环境中服务器都是单网卡,也没有做多余的Management Network.只好通过以下方法解决.1.右键点击Cluster选中 编辑设置.2.选择 vSphere HA,并点击 高级选项.3.在 选项 中双击以输入 “das.ignoreRedundantNetWarning”,在 值中双击以输入“true”.4.点击 确定 退出.5.右键点击Clu

Redis数据存储优化机制(转)

原文:Redis学习笔记4--Redis数据存储优化机制 1.zipmap优化hash: 前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个hash对象时开始是用zipmap来存储的.这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销.尽管zipmap的添加,删除,查找都是O(n),但是由于一般对象的field数量都不太多.所以使用zipmap也是很快的,

Andriod中数据存储的五种方式

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在 Activity中 重载窗

Android数据存储的五种方法汇总

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置

Python3编写网络爬虫12-数据存储方式五-非关系型数据库存储

非关系型数据库存储 NoSQL 全称 Not Only SQL 意为非SQL 泛指非关系型数据库.基于键值对 不需要经过SQL层解析 数据之间没有耦合性 性能非常高. 非关系型数据库可细分如下: 键值存储数据库: 代表有Redis.Voldemort.和Oracle BDB等. 列存储数据库:代表有Cassandra.HBase.和Riak等. 文档型数据库:代表有CouchDB.Mongodb等. 图形数据库:代表有Neo4J.InfoGrid.Infinite.Graph等. 对于爬虫的数据

对通过网络传输的数据进行加密

数据传输加密技术 目的是对传输中的数据流加密, 常用的方针有线路加密和端对端加密两种.前者侧重在线路上而不考虑信源与信宿, 是对保密信息通过各线路采用不同的加密密钥提供安全保护.后者则指信息由发送者端通过专用的加密软件,采用某种加密技术对所发送文件进行加密,把明文(也即原文)加密成密文(加密后的文件,这些文件内容是一些看不懂的代码), 然后进入TCP/IP数据包封装穿过互联网, 当这些信息一旦到达目的地, 将由收件人运用相应的密钥进行解密, 使密文恢复成为可读数据明文.目前最常用的加密技术有对称

JAVA 集合框架优化之list.removeAll大数据量优化

今天在公司做项目需要求两个集合的补集,考虑到collection类有removeAll方法,决定采用这种方式:结果程序一直卡在那儿不动了: 数据量是两个集合的数据差不多都有60万,直接导致程序处于假死状态(程序当然是还在运行): 出现问题始终要解决的,我又给程序修改为先用retainAll求交集,然后再removeAll的方式,效果不明显(事实是也假死了),我的应用场景还要求实时性,没办法只能从其他方面找寻思路了: 既然removeAll执行效率低,我就改成循环remove试试看,结果是效率上有

Redis学习笔记2--Redis数据存储优化机制

1.zipmap优化hash: 前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个hash对象时开始是用zipmap来存储的.这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销.尽管zipmap的添加,删除,查找都是O(n),但是由于一般对象的field数量都不太多.所以使用zipmap也是很快的,也就是说添加删除平均还是O(1).如果field或者val

Redis教程4--Redis数据存储优化机制

1.zipmap优化hash: 前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个hash对象时开始是用zipmap来存储的.这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销.尽管zipmap的添加,删除,查找都是O(n),但是由于一般对象的field数量都不太多.所以使用zipmap也是很快的,也就是说添加删除平均还是O(1).如果field或者val