DiskLruCache的简单用法 .

来源:互联网 发布:js toggle() 编辑:程序博客网 时间:2024/06/05 15:10

1 创建DiskLruCache缓存对象

DiskLruCache.open(File dir,intappVersion,int valueCount,long maxSize);

四个参数的含义:

1)缓存使用的路径。可以指定SD卡上的一个路径也可以指定app的cache目录

2)当前应用程序的版本号。该参数的意义是当app的版本升级时,旧有版本号对应的缓存内容会被清除

3)1个key对应几个缓存内容,一般传1

4)缓存使用的磁盘空间大小

用法示例:

第一个参数,设定使用的cache目录

String path = context.getExternalCacheDir().getAbsolutePath();

String dirName = “imageloadercache”;

File file = new File(path,dirName);

第二个参数,获得app版本号

PackageInfo info =context.getPackageManager().getPackageInfo(context.getPackageName(),0);

int version = info.versioinCode;


2 向DiskLruCache中存入文件

向DiskLruCache中缓存内容的方式与写入偏好设置文件时非常类似。先获得一个Editor对象,然后通过Editor对象缓存内容,缓存完毕后要提交commit。

1)先要获得一个Editor对象

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

其中cache是DiskLruCache的实例,key为一会儿使用editor进行文件保存时使用的键。该key一般又要获得的图片的路径来表示(将路径转为md5字符串)

2)接下来调用editor的newOutputStream方法。获得一个输出流对象。将要缓存的内容以InputStream的方式流到该outputStream对象中。newOutputStream方法需要一个int参数,这个参数的意思是:创建editor对象的时候需要一个key,而创建DiskLruCache对象的时候指定了一个key对应几个缓存内容,这里的int值指的就是,接下来即将缓存的内容是该key对应的第几个内容。如果一个key只对应一个缓存内容,则这里传入0。

Outputstream out = editor.newOutputStream(0);

bitmap.compress(Compress.JPEG,100,out);

流操作完毕后,务必提交一下:

editor.commit();

3)最后在缓存完毕后,还要提交一下刚才操作的日志文件

cache.flush();

 

3 从DiskLruCache中读取缓存内容

1)利用DiskLruCache的get方法获得指定key对应的内容,但是该内容是以DisrkLruCache.Snapshot类型来呈现的

Snapshot snap = cache.get(key);

2) 要获取Snapshot中的具体内容,需要调用Snapshot的getInputStream方法获得一个输入流,以IO流的方式获得具体内容。

InputStream in = snap.getInputStream(0);

getInputStream方法同样需要一个int类型的参数,该参数的意义与之前Editor对象获得输出流时提供的参数意义相同,不再赘述。

如果缓存的内容是一副图片,此时就可以利用BitmapFactory来进行获取了:

Bitmap bitmap = BitmapFactroy.decodeStream(in);

 

4 其他的一些相关API

remove(key) 移除指定key对应的所有缓存内容

delete() 移除所有缓存内容

0 0
原创粉丝点击