• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 10
    • 下载费用:30 金币  

    重庆时时彩十位: 一种图片数据缓存方法.pdf

    关 键 词:
    一种 图片 数据 缓存 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201710039039.8

    申请日:

    2017.01.19

    公开号:

    CN106802955A

    公开日:

    2017.06.06

    当前法律状态:

    实审

    有效性:

    审中

    法律详情: 实质审查的生效IPC(主分类):G06F 17/30申请日:20170119|||公开
    IPC分类号: G06F17/30; G06F12/0897(2016.01)I; G06F12/0895(2016.01)I; G06F12/123(2016.01)I 主分类号: G06F17/30
    申请人: 济南浪潮高新科技投资发展有限公司
    发明人: 于富昌
    地址: 250100 山东省济南市高新区孙村镇科航路2877号研发楼一楼
    优先权:
    专利代理机构: 济南信达专利事务所有限公司 37100 代理人: 孟峣
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201710039039.8

    授权公告号:

    |||

    法律状态公告日:

    2017.06.30|||2017.06.06

    法律状态类型:

    实质审查的生效|||公开

    摘要

    本发明公开了一种图片数据缓存方法,通过内存缓存和SD卡缓存来实现图片缓存,其中内存缓存包含两个层级,SD卡缓存包含一个层级的缓存,其具体实现过程为:首先在内存中开辟一块缓存空间,该缓存通过强引用类型存储数据,该缓存空间为每个应用分配的内存的八分之一;在内存中开辟一块二级缓存空间,通过软引用类型,来存储第一层内存剔除出来的缓存;然后在SD卡中建立一个目录来存储网络请求得到的图片数据;最后进行数据读取本发明的一种图片数据缓存方法与现有技术相比,通过利用LRU算法实现了一种包含内存缓存和SD卡缓存,可方便快速的在UI界面展示缓存的图片,提高用户体验,节省流量,实用性强。

    权利要求书

    1.一种图片数据缓存方法,其特征在于,通过内存缓存和SD卡缓存来实现图片缓存,其
    中内存缓存包含两个层级,SD卡缓存包含一个层级的缓存,其具体实现过程为:
    首先在内存中开辟一块缓存空间,该缓存通过强引用类型存储数据,该缓存空间为每
    个应用分配的内存的八分之一;
    在内存中开辟一块二级缓存空间,通过软引用类型,来存储第一层内存剔除出来的缓
    存;
    然后在SD卡中建立一个目录来存储网络请求得到的图片数据;
    最后进行数据读取,首先读取第一层强引用的缓存,通过get,即键值的方式看是否能
    够获取到,如果获取不到,则读取第二层软引用层的缓存,当第二层无法获取到缓存数据
    时,则查询SD卡中的缓存,三层中有一次命中即立刻返回调用者,不再向下查询,如三层均
    未能命中则此时需从网络请求资源,请求到之后除返回调用者外还需将请求到的内容同时
    存入第一层缓存和第三层缓存。
    2.根据权利要求1所述的一种图片数据缓存方法,其特征在于,所述内存中的一级缓存
    空间使用LRU算法,通过软引用类型存储数据,即只要存在键值必能够找到对应的实体;二
    级缓存空间使用LRU算法,通过软引用类型存储数据,即存储第一层内存剔除出来的实体。
    3.根据权利要求2所述的一种图片数据缓存方法,其特征在于,上述通过键值能够找到
    对应的实体是指在一级缓存空间中,通过键值获取缓存内容,提供移出缓存时的键值和缓
    存内容,即通过该一级缓存空间提供,提供put、get方法,在空间中存储数据的时候按照LRU
    算法存储,当缓存中有被替换出的内容时把被替换的内容反映出来,以便把被替换的内容
    放到下一层缓存中。
    4.根据权利要求1-3任一所述的一种图片数据缓存方法,其特征在于,所述一级缓存空
    间用来存储强引用缓存和监听缓存移除事件,其创建过程为,
    首先创建第一层级缓存:
    在该第一层缓存空间中配置内存容量度量函数sizeOf函数,保证总体占据的空间不超
    过设置空间:
    配置entryRemoved类,用于监听哪个图片资源被移除,并将移除的资源放入二级缓存:
    配置一添加???,来添加新图片资源到该第一层级缓存空间。
    5.根据权利要求1所述的一种图片数据缓存方法,其特征在于,所述第二层级的缓存结
    构用软引用包装存入的图片资源,其创建过程为,
    首先创建一个第二层级的缓存;
    在该第二层级缓存空间中配置内存容量度量函数sizeOf函数,不让总体内存超过最大
    内存。
    6.根据权利要求1所述的一种图片数据缓存方法,其特征在于,当向SD卡存储所有从网
    络获取到的图片数据时,存储方式通过LRU算法实现。
    7.根据权利要求6所述的一种图片数据缓存方法,其特征在于,在创建SD卡的缓存时,
    需要指定缓存目录,应用版本,缓存版本和缓存大小,所述SD卡缓存使用DiskLruCache类,
    由此类直接负责对空间管理。
    8.根据权利要求1所述的一种图片数据缓存方法,其特征在于,在进行数据读取时,通
    过逐层向下读取实现,具体为:首先从强引用存储区获取所需图片数据,如果命中则返回渲
    染UI,如果不能命中则从软引用存储区获取,如命中则从中取出需要的数据,如果仍未命中
    则从SD卡的缓存中获取,当还未命中,即都不存在时则从网络获取数据。

    说明书

    一种图片数据缓存方法

    技术领域

    本发明涉及计算机应用技术领域,具体地说是一种图片数据缓存方法。

    背景技术

    LRU,全称Least Rencetly Used,即最近最少使用,是一种非常常用的置换算法,
    也即淘汰最长时间未使用的对象。LRU在操作系统中的页面置换算法中广泛使用,我们的内
    存或缓存空间是有限的,当新加入一个对象时,造成我们的缓存空间不足了,此时就需要根
    据某种算法对缓存中原有数据进行淘汰货删除,而LRU选择的是将最长时间未使用的对象
    进行淘汰。

    根据LRU算法的思想,要实现LRU最核心的是要有一种数据结构能够基于访问顺序
    来保存缓存中的对象,这样我们就能够很方便的知道哪个对象是最近访问的,哪个对象是
    最长时间未访问的。LruCache选择的是LinkedHashMap这个数据结构,LinkedHashMap是一
    个双向循环链表,在构造LinkedHashMap时,通过一个boolean值来指定LinkedHashMap中保
    存数据的方式。

    通过查阅LRU代码可以知道当accessOrder 设置为 true时,每当我们更新(即调
    用put方法)或访问(即调用get方法)map中的结点时,LinkedHashMap内部都会将这个结点
    移动到链表的尾部,因此,在链表的尾部是最近刚刚使用的结点,在链表的头部是是最近最
    少使用的结点,当我们的缓存空间不足时,就应该持续把链表头部结点移除掉,直到有剩余
    空间放置新结点。

    Android应用中联网加载并显示图片时,为了用户体验和节省流量,一定用到图片
    的缓存,通过缓存的图片同时也能够快速将图片展示到UI上,这对提升用户体验有很重要
    的作用,但是现有的图片加载方式较为落后,实用性不强。

    因而,本发明提供一种通用数据交换接口的实现方法,本发明通过利用LRU算法实
    现了一种包含内存缓存和SD卡缓存。

    发明内容

    本发明的技术任务是针对以上不足之处,提供一种实用性强、可广泛应用于异构
    数据集成与交换系统中的图片数据缓存方法。

    一种图片数据缓存方法,通过内存缓存和SD卡缓存来实现图片缓存,其中内存缓存包
    含两个层级,SD卡缓存包含一个层级的缓存,其具体实现过程为:

    首先在内存中开辟一块缓存空间,该缓存通过强引用类型存储数据,该缓存空间为每
    个应用分配的内存的八分之一;

    在内存中开辟一块二级缓存空间,通过软引用类型,来存储第一层内存剔除出来的缓
    存;

    然后在SD卡中建立一个目录来存储网络请求得到的图片数据;

    最后进行数据读取,首先读取第一层强引用的缓存,通过get,即键值的方式看是否能
    够获取到,如果获取不到,则读取第二层软引用层的缓存,当第二层无法获取到缓存数据
    时,则查询SD卡中的缓存,三层中有一次命中即立刻返回调用者,不再向下查询,如三层均
    未能命中则此时需从网络请求资源,请求到之后除返回调用者外还需将请求到的内容同时
    存入第一层缓存和第三层缓存。

    所述内存中的一级缓存空间使用LRU算法,通过软引用类型存储数据,即只要存在
    键值必能够找到对应的实体;二级缓存空间使用LRU算法,通过软引用类型存储数据,即存
    储第一层内存剔除出来的实体。

    上述通过键值能够找到对应的实体是指在一级缓存空间中,通过键值获取缓存内
    容,提供移出缓存时的键值和缓存内容,即通过该一级缓存空间提供,提供put、get方法,在
    空间中存储数据的时候按照LRU算法存储,当缓存中有被替换出的内容时把被替换的内容
    反映出来,以便把被替换的内容放到下一层缓存中。

    所述一级缓存空间用来存储强引用缓存和监听缓存移除事件,其创建过程为,

    首先创建第一层级缓存:

    在该第一层缓存空间中配置内存容量度量函数sizeOf函数,保证总体占据的空间不超
    过设置空间:

    配置entryRemoved类,用于监听哪个图片资源被移除,并将移除的资源放入二级缓存:

    配置一添加???,来添加新图片资源到该第一层级缓存空间。

    所述第二层级的缓存结构用软引用包装存入的图片资源,其创建过程为,

    首先创建一个第二层级的缓存;

    在该第二层级缓存空间中配置内存容量度量函数sizeOf函数,不让总体内存超过最大
    内存。

    当向SD卡存储所有从网络获取到的图片数据时,存储方式通过LRU算法实现。

    在创建SD卡的缓存时,需要指定缓存目录,应用版本,缓存版本和缓存大小,所述
    SD卡缓存使用DiskLruCache类,由此类直接负责对空间管理。

    在进行数据读取时,通过逐层向下读取实现,具体为:首先从强引用存储区获取所
    需图片数据,如果命中则返回渲染UI,如果不能命中则从软引用存储区获取,如命中则从中
    取出需要的数据,如果仍未命中则从SD卡的缓存中获取,当还未命中,即都不存在时则从网
    络获取数据。

    本发明的一种图片数据缓存方法和现有技术相比,具有以下有益效果:

    本发明的一种图片数据缓存方法,通过利用LRU算法实现了一种包含内存缓存和SD卡
    缓存,可方便快速的在UI界面展示缓存的图片,提高用户体验,节省流量,实用性强,适用范
    围广泛,易于推广。

    附图说明

    附图1为本发明的实现流程图。

    具体实施方式

    下面结合附图及具体实施例对本发明作进一步说明。

    如附图1所示,一种图片数据缓存方法,通过内存缓存和SD卡缓存来实现图片缓
    存,其中内存缓存包含两个层级,SD卡缓存包含一个层级的缓存,其具体实现过程为:

    A: 首先内存中开辟一块缓存空间,大约占有每个应用分配的内存的八分之一,此缓存
    使用LRU算法,并且使用强引用类型存储数据,即只要存在的键值必能够找到对应的实体,
    作用是能快速取出最常使用的实体。

    利用LRU算法建立一个空间有限的,可以存储强引用的存储空间。用于存储从网络
    请求得到的数据。

    B: 在内存中开辟一块二级的缓存空间,此空间中可以用来存储第一层内存剔除
    出来的实体,此缓存使用LRU算法,与第一层级不同的是第二层级使用软引用作为缓存,这
    一层级实现能够做到与第一层级几近相同的渲染速度,但是因为使用的是软引用,使用这
    段内存的时候就不必担心因为是强引用导致的OOM。

    建立一个空间使用灵活,不影响内存空间回收,又能够提供内存级别读写速度的
    缓存。用于存储第一层缓存替换下来的仍有可能用到的数据。

    C: 在SD卡中建立一个目录用来存储网络请求得到的图片数据,这一层分配的空
    间可以比较大,因为SD卡的空间是比较大的。同时,SD卡是三个层级的缓存中速度最慢的,
    类似于PC中内存和硬盘,SD卡即相当于硬盘,特点是存储量大,读取速度慢,但比网络快一
    些,并且更为稳定。

    在SD卡中开辟一个属于本应用的目录空间用来存储当前应用从网络请求获取到
    的数据信息,但是这里也不是无限制的向此空间中存储,只是空间大小可以设置的比较大
    一些。

    D: 读取的过程,首先从强引用存储区获取所需图片数据,如果命中则返回渲染
    UI,如果不能命中则从软引用存储区获取,如命中则从中取出需要的数据。再次,仍未命中
    则从SD卡的缓存中获取,最后如前面都不存在则必须从网络获取数据。

    基于上述步骤,为完成Android软件能够实现高速和空间利用率高的缓存方案,在
    设计上本发明完善后的步骤如下:

    1)设计一个存在在内存中的缓存,能够实现通过键值获取缓存内容,能够提供移出缓
    存时的键值和缓存内容的方法

    这里包含的是设计一个指定大小的缓存空间,提供put,get方法,向空间中存储数据的
    时候能够按照LRU算法存储,当缓存中有被替换出的内容时需要把被替换的内容反映出来,
    以便把被替换的内容放到下一层缓存中。这里除了直接移除了第一层的存储之外,又尝试
    了存入第二层缓存,原因是此时移除的缓存内容仍然有较大的可能性被用到,所以存入二
    级缓存。

    2)设计一个第二层级的缓存,用于存储第一层缓存。

    通过第一层缓存通过替换算法替换缓存,把替换出来的键值和实体存到这一层缓
    存,目的是为了能够更好的利用内存空间,由于这里的缓存存储的是软引用所以不会影响
    系统对内存资源的回收。

    3)设计一个SD卡缓存,用于存储所有从网络获取到的图片数据。

    SD卡的特点是容量大,但速度比内存慢一些,当网络请求返回图片数据的时候,立
    刻在这里把数据存到SD卡中,到达SD卡这里的时候,存储方式同样遵循LRU,这样能够使存
    储的信息不至于过多,影响手机性能。同时键值对的对应有是通过URL的MD5编码来实现的。

    4)读取缓存内容,把读取到的缓存反馈到调用者。

    读取缓存需要逐层向下读取,首先读取第一层强引用的缓存,通过get(键值)的方
    式看是否能够获取到,如果获取不到,则读取第二层软引用层的缓存,在这一层空间有伸缩
    性,如果内存空间比较充足则可以读取到,如果比较紧张,这里的缓存内容也不是很多。这
    时需要查询SD卡中的缓存,SD卡内容较多,命中概率较高。三层中有一次命中即立刻返回调
    用者,不再向下查询,如三层均未能命中则此时需从网络请求资源,请求到之后除返回调用
    者外还需将请求到的内容同时存入第一层缓存和第三层缓存。

    现在以实例来进行详细描述,该实例是在android应用界面开发中的实际应用,解
    决应用@互动机制问题:

    1、设计一个第一层级,强引用的缓存,用来存储强引用缓存和监听缓存移除事件。

    (1)创建第一层级缓存:

    mMemoryFirstLevelCache = new LruCache<String, Bitmap>(cacheSize)

    (2)实现sizeOf方法,实现这个方法是为了保证总体占据的空间不能超过设置空间:

    @Override

    protected int sizeOf(String key, SoftReference<Bitmap> value) {

    return super.sizeOf(key, value);

    }

    (3)实现entryRemoved方法,这里是为了监听哪个图片资源被移除,这里移除的资源放
    入二级缓存:

    @Override

    protected void entryRemoved(boolean evicted, String key,

    Bitmap oldValue, Bitmap newValue) {

    super.entryRemoved(evicted, key, oldValue, newValue);

    SoftReference<Bitmap> softReference = new SoftReference<Bitmap>(

    oldValue);

    mSecondMemoryCache.put(key, softReference);

    }

    4)实现添加新图片资源到缓存空间的方法:

    public void addBitmapToMemoryCache(String key, Bitmap bitmap) {

    if (getBitmapFromMemoryCache(key) == null) {

    mMemoryCache.put(key, bitmap);

    }

    }

    2、设计一个第二层级的缓存结构,用软引用包装存入的图片资源。

    (1)创建一个第二层级的缓存。

    mMemorySecondLevelCache = new LruCache<String, SoftReference<Bitmap>>
    (cacheSize)

    (2)实现sizeOf方法,不让总体内存超过最大内存。

    @Override

    protected int sizeOf(String key, SoftReference<Bitmap> value) {

    return super.sizeOf(key, value);

    }

    3、设计一个SD卡的缓存方案,存储网络数据。

    1)创建一个SD卡的缓存,需要指定缓存目录,应用版本,缓存版本和缓存大小,这
    里的SD卡缓存使用DiskLruCache类,由此类直接负责对空间管理:

    mDiskThirdLevelCache = DiskLruCache.open(cacheDir, getAppVersion
    (context),1, 10 * 1024 * 1024);

    4、顺次读取缓存内容。

    (1)读取第一层缓存:

    public Bitmap getBitmapFromMemoryCache(String key) {

    if (mMemoryCache.get(key) == null) {

    return getBitmapFromSecondMemoryCache(key);

    }

    return mMemoryCache.get(key);

    }

    (2)如果第一层为空则读取第二层缓存:

    public Bitmap getBitmapFromSecondMemoryCache(String key) {

    if (mSecondMemoryCache.get(key) != null) {

    return mSecondMemoryCache.get(key).get();

    }

    return null;

    }

    3)如果没有则查询SD卡缓存:

    snapShot = mDiskLruCache.get(key);

    (4)如果SD卡没有则启动异步任务获取资源,同时把请求结果存入第一层缓存和SD卡
    缓存:

    CacheTask cacheTask = new CacheTask();

    cacheTask.execute(imageUrl);

    DiskLruCache.Editor editor = mDiskLruCache.edit(key);

    if (editor != null) {

    OutputStream outputStream = editor.newOutputStream(0);

    if (downloadUrlToStream(imageUrl, outputStream)) {

    editor.commit();

    } else {

    editor.abort();

    }

    }

    通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理
    解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述技术领域的技
    术人员可任意组合不同的技术特征,从而实现不同的技术方案。

    除说明书所述的技术特征外,均为本专业技术人员的已知技术。

    关于本文
    本文标题:一种图片数据缓存方法.pdf
    链接地址://www.4mum.com.cn/p-6000759.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 江苏时时彩百度贴吧 三全中是什么意思 江苏十一选五前三技巧 中原河北麻将下载 二分彩算不算违法 北京pk10赛车28网玩法 第1彩票网址 新疆25选7078期开奖 极速飞艇计划手机版 双色球预测 黑龙江快乐十分中奖 碎乐猜歌赚钱破解 000039股票分析 重庆百变王牌073047 11选5彩票中心 35选7头奖多少钱