package com.arialyy.frame.cache;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import com.arialyy.frame.util.DrawableUtil;
import com.arialyy.frame.util.show.L;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
/**
* Created by AriaLyy on 2015/4/9.
* 缓存工具
*/
public class CacheUtil extends AbsCache {
private static final String TAG = "CacheUtil";
/**
* 默认使用默认路径
*
* @param context
* @param useMemory 是否使用内存缓存
*/
public CacheUtil(Context context, boolean useMemory) {
super(context, useMemory);
}
/**
* 指定缓存文件夹
*
* @param context
* @param useMemory 是否使用内存缓存
* @param cacheDir 缓存文件夹
*/
public CacheUtil(Context context, boolean useMemory, @NonNull String cacheDir) {
super(context, useMemory, cacheDir);
}
/**
* 设置是否使用内存缓存
*/
public void setUseMemoryCache(boolean useMemoryCache) {
setUseMemory(useMemoryCache);
}
/**
* 打开某个目录下的缓存
*
* @param cacheDir 缓存目录,只需填写文件夹名,不需要写路径
* @param valueCount 指定同一个key可以对应多少个缓存文件,基本都是传1
* @param cacheSize 缓存大小
* @see CacheParam
*/
public void openCache(String cacheDir, int valueCount, long cacheSize) {
openDiskCache(cacheDir, valueCount, cacheSize);
}
/**
* 写入Bitmap类型缓存,注意:需要在特定的时候flush,一般在onPause()里面写,onDestroy()
*
* @param key 键值,一般是url
* @param bitmap 需要写入的数据
*/
public void putBitmapCache(String key, Bitmap bitmap) {
byte[] data = DrawableUtil.getBitmapByte(bitmap);
putByteCache(key, data);
}
/**
* 获取缓存中的bitmap
*
* @param key
* @return
*/
public Bitmap getBitmapCache(String key) {
byte[] data = getByteCache(key);
return DrawableUtil.getBitmapFromByte(data);
}
/**
* 写入String类型缓存,注意:需要在特定的时候flush,一般在onPause()里面写,onDestroy()
*
* @param key 键值,一般是url
* @param data 需要写入的数据
*/
public void putStringCache(String key, String data) {
try {
putByteCache(key, data.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/**
* 读取字符串缓存
*/
public String getStringCache(String key) {
byte[] data = getByteCache(key);
String str = "";
if (data != null) {
try {
str = new String(data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return str;
}
/**
* 写入byte类型缓存,注意:需要在特定的时候flush,一般在onPause()里面写,onDestroy()
*
* @param key 键值,一般是url
* @param data 需要写入的数据
*/
public void putByteCache(String key, byte[] data) {
writeDiskCache(key, data);
}
/**
* 读取byte类型缓存
*
* @param key 缓存的key
*/
public byte[] getByteCache(String key) {
return readDiskCache(key);
}
/**
* 写入对象缓存后,注意:需要在特定的时候flush,一般在onPause()里面写,onDestroy()
*
* @param clazz 对象类型
* @param key 缓存键值
* @param object 对象
*/
public void putObjectCache(Class<?> clazz, String key, Object object) {
String json = new Gson().toJson(object, clazz);
try {
writeDiskCache(key, json.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
L.e(TAG, "编码转换错误", e);
}
}
/**
* 读取对象缓存
*
* @param clazz 对象类型
* @param key 缓存键值
* @return
*/
public <T> T getObjectCache(Class<T> clazz, String key) {
T object = null;
try {
object = new Gson().fromJson(new String(readDiskCache(key), "utf-8"), clazz);
} catch (UnsupportedEncodingException e) {
L.e(TAG, "编码转换错误", e);
}
return object;
}
/**
* 同步记录,不同步则提取不了缓存
*/
public void flush() {
flushDiskCache();
}
/**
* 删除一条缓存
*
* @param key 缓存键值
*/
public void remove(String key) {
readDiskCache(key);
}
/**
* 删除所有缓存
*/
public void removeAll() {
clearCache();
}
/**
* 关闭磁盘缓存
*/
public void close() {
closeDiskCache();
}
/**
* 获取缓存大小
*/
public long getCacheSize() {
return super.getCacheSize();
}
}