相册磁盘缓存分析

相册磁盘缓存主要是imgcache.0,imgcache.1,imgcache.idx三个文件;其中imgcache.idx位索引文件,其余两个位数据文件(存放缩略图内容)。

索引文件格式:

MAGIC MAX_ENTRIES MAX_BYTES ACTIVE_REGION ACTIVE_ENTRIES ACTIVE_BYTES VERSION CHECKSUM THUMB_KEY THUMB_OFFSET THUMB_KEY THUMB_OFFSET

绿色部分为索引文件头,每个字节均为4个字节,共32个字节;黄色部分表示每个缩略图的可以和在数据文件中的起始位置,THUMB_KEY占8个字节,THUMB_OFFSET占3个字节,每表示一个缩略图需要12个字节。

数据文件格式:

MAGIC KEY CHECKSUM OFFSET LENGTH DATA(VAR—LEN) KEY CHECKSUM OFFSET LENGTH DATA(VAR—LEN)

灰色部分为文件头,仅占四个字节;蓝色区域为数据的Blob头,KEY占用8个字节,其余占4个字节,共22个字节;红色区域为数据域,长度可变(BLOB的LENGTH指定),表示具体的缩略图数据。

BlobCache加载流程:

缩略图插入流程:

缩略图查询流程:

源码位置:https://github.com/zhangcheng0308/GalleryDiskCache

时间: 2024-10-06 05:01:15

相册磁盘缓存分析的相关文章

请注意,Volley已默认使用磁盘缓存

之前学习volley框架,用ImageLoader可以设置内存缓存,用一个LruCache,就可以避免OOM且图片读取速度快,爽极了. 后来想,如果只是内存缓存的话,那退出程序或者内存不够大了,缓存的图片不就被清理掉了,这样每次启动程序就又得去网上下载图片,流量好贵的. 于是找到了磁盘缓存框架DiskLruCache,这是一个挺著名的开源框架,网易云阅读等APP之前都用它来缓存图片,关于这个框架的使用可以看这篇博客. 找到这个框架后我就着手把DiskLruCache和Volley结合起来,用Lr

LruDiskCache要点--不可不用的磁盘缓存工具类

LruDiskCache是使用Lru算法的磁盘缓存类,它的功能是将LruCache中缓存位置由内存改为磁盘,一般两者结合使用,用于对处理小文件,图片的缓存. 下面记录下阅读过程中几个比较重要的点: Get 获取缓存数据时,LruDiskCache会使用LinkedHashmap的算法,也就是最常使用的放在尾部,最少使用的首先被遍历到. 当你需要获取缓存数据时,首先会得到是一个Snapshot对象(如果数据正常的话:写入成功.在有效内等等),Snapshot其实就是持有缓存文件的输入流,无其它逻辑

详细讲解Android的图片下载框架UniversialImageLoader之磁盘缓存(一)

沉浸在Android的开发世界中有一些年头的猴子们,估计都能够深深的体会到Android中的图片下载.展示.缓存一直是心中抹不去的痛.鄙人亦是如此.Ok,闲话不说,为了督促自己的学习,下面就逐一的挖掘Android中还算是比较牛叉的图片处理框架UniversialImageLoader以飨读者吧! 凡事如果过于草率必将陷入泥塘不能自拔.还是按部就班的一步一步的将这个框架给啃透. 第一个要讲的是磁盘的缓存的接口DiskCache 首先看一下其中的核心的接口的代码: File getDirector

【安卓中的缓存策略系列】安卓缓存策略之磁盘缓存DiskLruCache

安卓中的缓存包括两种情况即内存缓存与磁盘缓存,其中内存缓存主要是使用LruCache这个类,其中内存缓存我在[安卓中的缓存策略系列]安卓缓存策略之内存缓存LruCache中已经进行过详细讲解,如看官还没看过此博客,建议看官先去看一下. 我们知道LruCache可以让我们快速的从内存中获取用户最近使用过的Bitmap,但是我们无法保证最近访问过的Bitmap都能够保存在缓存中,像类似GridView等需要大量数据填充的控件很容易就会用完整个内存缓存.另外,我们的应用可能会被类似打电话等行为而暂停导

【转载】基于AFNetWorking3.0的图片缓存分析

原文出处: Yasin的简书 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.CoreData…).我们常说的网络请求缓存包含内存缓存.硬盘缓存和URL缓存. 图片缓存思路 图片缓存流程图.png URL缓存 网络请求除了客户端需要做简单的配置外,最主要需要服务器支持,服务端也很简单,只需要在response里面设置Cache-Control字段就行了. 最常见的URL缓存实现方式:NSURLCache.NSURLCac

Part1:Volley磁盘缓存

CacheDispatcher CacheEntry和DiskBasedCacheCacheHeader DiskBasedCacheCountingInputStream 缓存的核心DiskBasedCache 初始化逻辑initialize函数 pruneIfNeeded get和put else 思考 LRU算法一定合理吗如何增大缓存的命中率 文件名重复问题 首先研究一下Volley的磁盘缓存原理,它主要包括以下几个类 CacheDispatcher缓存的具体执行类,继承Thread Di

XHNetworkCache,一行代码将请求数据写入磁盘缓存

XHNetworkCache 版本记录(持续更新)2016.07.01 Version 1.1(更新) 1.增加手动清除缓存接口 2.增加获取缓存大小接口 2016.06.24 Version 1.0(发布)使用方法:1.写入 [Objective-C] 查看源文件 复制代码 ? 1 2 3 //将数据写入磁盘缓存(参数1:服务器返回的JSON数据, 参数2:数据请求URL) //[按APP版本号缓存,不同版本APP,同一接口缓存数据互不干扰] [XHNetworkCache saveJsonR

详细讲解Android的图片下载框架UniversialImageLoader之磁盘缓存的扩展(二)

相对于第一篇来讲,这里讲的是磁盘缓存的延续.在这里我们主要是关注四个类,分别是DiskLruCache.LruDiskCache.StrictLineReader以及工具类Util. 接下来逐一的对它们进行剖析.废话不多说. 首先来看一下DiskLruCache. 这个类的主要功能是什么呢?我们先来看一段类的注释: /** * A cache that uses a bounded amount of space on a filesystem. Each cache * entry has a

iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache

1.在项目中我们难免会用到一些缓存方式来保存服务器传过来的数据,以减少服务器的压力. 缓存的方式分为两种分别为内存缓存和磁盘缓存,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化.常见的内存缓存有NSCache.TMMemoryCache.PINMemoryCache.YYMemoryCache.常见的磁盘缓存有TMDiskCache.PINDiskCache.YYCache. 1.本文章着重讲下YYCache. 这是为什么呢,因为他比其他的缓存框架更加高效,使用方便. YYCache: 去掉