Android中DisLruCache缓存封装
来源:互联网 发布:安卓社交软件 编辑:程序博客网 时间:2024/05/21 11:33
Android中DisLruCache缓存封装
DisLruCache文件下载
CSDN下载
github下载
DisLruCache介绍
DisLruCache介绍(郭霖博客)
DisLruCache介绍(鸿洋博客)
DisLruCache之CacheManager封装
CacheManager是对DisLruCache的再次封装
public class CacheManager { private static CacheManager manager; private DiskLruCache mDiskLruCache = null; private static final int CACHE_MAX_SIZE = 10 * 1024 * 1024; private static final int VALUE_COUNT = 1; private static Context context = APP.getContext(); private static final int BUFFER = 1024; private CacheManager() { } public static CacheManager getInstance() { if (manager == null) { synchronized (CacheManager.class) { if (manager == null) { manager = new CacheManager(); } } } return manager; } /** * 获取版本号 */ public int getAppVersion() { try { PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); return info.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return 1; } /** * 获取缓存目录 */ public File getDiskCacheDir(@NonNull String uniqueName) { String cachePath = ""; if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) { File f = context.getExternalCacheDir(); if (f != null) { cachePath = f.getPath(); } } else { cachePath = context.getCacheDir().getPath(); } Log.e("zhang", "getDiskCacheDir: " + cachePath); return new File(cachePath + File.separator + uniqueName); } /** * 一个缓存目录只有一个文件 */ public CacheManager open(String dir) { open(dir, VALUE_COUNT); return manager; } /** * dir:缓存的目录/路径 * valueCount:缓存文件的个数 */ public CacheManager open(String dir, int valueCount) { try { mDiskLruCache = DiskLruCache.open(getDiskCacheDir(dir), getAppVersion(), valueCount, CACHE_MAX_SIZE); } catch (IOException e) { e.printStackTrace(); } return manager; } /** * md5生成缓存key */ public String hashKeyForDisk(@NonNull String key) { String cacheKey; try { final MessageDigest mDigest = MessageDigest.getInstance("MD5"); mDigest.update(key.getBytes()); cacheKey = bytesToHexString(mDigest.digest()); } catch (NoSuchAlgorithmException e) { cacheKey = String.valueOf(key.hashCode()); } return cacheKey; } private String bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte aByte : bytes) { String hex = Integer.toHexString(0xFF & aByte); if (hex.length() == 1) { sb.append('0'); } sb.append(hex); } return sb.toString(); } /** * 保存字符串 * key是通过LinkedHashMap获取缓存中的Entry对象 * index是获取目录中的文件索引 * value是需要保存的信息值 */ public void saveString(String key, int index, @NonNull String value) { try { DiskLruCache.Editor editor = mDiskLruCache.edit(hashKeyForDisk(key)); editor.set(index, value); editor.commit(); } catch (IOException e) { e.printStackTrace(); } } public void saveString(String key, @NonNull String value) { saveString(key, 0, value); } /** * 保存流信息 * key是通过LinkedHashMap获取缓存中的Entry对象 * index是获取目录中的文件索引 * value是需要保存的信息流 */ public void saveStream(String key, int index, @NonNull InputStream value) { int len = 0; byte[] bytes = new byte[BUFFER]; OutputStream os = null; try { DiskLruCache.Editor editor = mDiskLruCache.edit(hashKeyForDisk(key)); os = editor.newOutputStream(index); while ((len = value.read(bytes)) != -1) { os.write(bytes, 0, len); } editor.commit(); mDiskLruCache.flush(); } catch (IOException e) { e.printStackTrace(); } finally { //快速关流 DiskLruCache.closeQuietly(os); } } public void saveStream(@NonNull String key, @NonNull InputStream value) { saveStream(key, 0, value); } /** * 获取缓存的String字符串 * key是通过LinkedHashMap获取缓存中的Entry对象 * index是获取目录中的文件索引 */ public String getString(@NonNull String key, int index) { try { DiskLruCache.Snapshot snapshot = mDiskLruCache.get(hashKeyForDisk(key)); if (snapshot != null) { return snapshot.getString(index); } } catch (IOException e) { e.printStackTrace(); } return ""; } public String getString(@NonNull String key) { return getString(key, 0); } /** * 获取缓存的String字符串 * key是通过LinkedHashMap获取缓存中的Entry对象 * index是获取目录中的文件索引 */ public InputStream getInputStream(@NonNull String key, int index) { try { DiskLruCache.Snapshot snapshot = mDiskLruCache.get(hashKeyForDisk(key)); if (snapshot == null) return null; return snapshot.getInputStream(index); } catch (IOException e) { e.printStackTrace(); } return null; } public InputStream getInputStream(@NonNull String key) { return getInputStream(key, 0); } /** * 删除对应的key缓存 */ public boolean remove(@NonNull String key) { try { return mDiskLruCache.remove(hashKeyForDisk(key)); } catch (IOException e) { e.printStackTrace(); } return false; } /** * 清除所有信息 */ public void clear() { try { mDiskLruCache.delete(); } catch (IOException e) { e.printStackTrace(); } }}
0 0
- Android中DisLruCache缓存封装
- android清除缓存封装
- Android DiskLruCache缓存工具封装
- android缓存系列:动手封装DiskLruCache
- <Android>之三级缓存(及封装方法)
- Android 封装工具类之文件缓存
- android中dialog封装
- 封装缓存
- DisLruCache学习笔记
- android中缓存策略
- android中sharedpreference封装思路
- Android中封装Http请求
- Android 中常用工具类封装
- Android 图片三级缓存机制工具类封装
- Android 图片三级缓存机制工具类封装
- Android 图片三级缓存机制工具类封装
- Android 图片三级缓存机制工具类封装
- 自己封装双缓存管理框架Android 库
- 前端学习笔记1--md5加密中文
- ajax传递数组
- java设计模式——状态模式(State Pattern)
- Android 的按钮的监听事件的写法
- Storyboard 本地化修改
- Android中DisLruCache缓存封装
- Android TypedValue.applyDimension()的用法
- jquery 商品飞入购物车的动画
- C3p0数据库连接池配置详解与数据库连接建立
- 自动编译搭建lnmp
- java泛型
- MFC程序的运行过程和消息映射机制
- 【模拟】NEERC15 J Jump (Codeforces GYM 100851)
- 递归算法(求n的加法组合,将一个整数拆分成多个整数相加的形式, O(N)时间,O(N)空间)