DiskLruCache的基本用法

DiskLruCache简介

GitHub:https://github.com/JakeWharton/DiskLruCache

APIDoc:http://jakewharton.github.io/DiskLruCache/

  1. 缓存的keyString类型,且必须匹配正则表达式[a-z0-9_-]{1,64}
  2. 一个key可以对应多个value,value类型为字节数组,大小在0 ~ Integer.MAX_VALUE之间;
  3. 缓存的目录必须为专用目录,因为DiskLruCache可能会删除或覆盖该目录下的文件。
  4. 添加缓存操作具备原子性,但多个进程不应该同时使用同一个缓存目录。

添加依赖

// add dependence
implementation 'com.jakewharton:disklrucache:2.0.2'

创建DiskLruCache对象

/*
 * directory – 缓存目录
 * appVersion - 缓存版本
 * valueCount – 每个key对应value的个数
 * maxSize – 缓存大小的上限
 */
DiskLruCache diskLruCache = DiskLruCache.open(directory, 1, 1, 1024 * 1024 * 10);

添加 / 获取 缓存(一对一)

/**
 * 添加一条缓存,一个key对应一个value
 */
public void addDiskCache(String key, String value) throws IOException {
    File cacheDir = context.getCacheDir();
    DiskLruCache diskLruCache = DiskLruCache.open(cacheDir, 1, 1, 1024 * 1024 * 10);
    DiskLruCache.Editor editor = diskLruCache.edit(key);
    // index与valueCount对应,分别为0,1,2...valueCount-1
    editor.newOutputStream(0).write(value.getBytes()); 
    editor.commit();
    diskLruCache.close();
}
/**
 * 获取一条缓存,一个key对应一个value
 */
public void getDiskCache(String key) throws IOException {
    File directory = context.getCacheDir();
    DiskLruCache diskLruCache = DiskLruCache.open(directory, 1, 1, 1024 * 1024 * 10);
    String value = diskLruCache.get(key).getString(0);
    diskLruCache.close();
}

添加 / 获取 缓存(一对多)

/**
 * 添加一条缓存,1个key对应2个value
 */
public void addDiskCache(String key, String value1, String value2) throws IOException {
    File directory = context.getCacheDir();
    DiskLruCache diskLruCache = DiskLruCache.open(directory, 1, 2, 1024 * 1024 * 10);
    DiskLruCache.Editor editor = diskLruCache.edit(key);
    editor.newOutputStream(0).write(value1.getBytes());
    editor.newOutputStream(1).write(value2.getBytes());
    editor.commit();
    diskLruCache.close();
}
/**
 * 添加一条缓存,1个key对应2个value
 */
public void getDiskCache(String key) throws IOException {
    File directory = context.getCacheDir();
    DiskLruCache diskLruCache = DiskLruCache.open(directory, 1, 2, 1024);
    DiskLruCache.Snapshot snapshot = diskLruCache.get(key);
    String value1 = snapshot.getString(0);
    String value2 = snapshot.getString(1);
    diskLruCache.close();
}

你可能感兴趣的:(DiskLruCache的基本用法)