package com.beanu.arad.http; import android.content.Context; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InvalidClassException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class CacheManager { private static final String TAG = "CacheManager"; // wifi缓存时间为5分钟 private static long wifi_cache_time = 5 * 60 * 1000; // 其他网络环境为1小时 private static long other_cache_time = 60 * 60 * 1000; /** * 保存对象 * * @param ser * @param file */ public static boolean saveObject(Context context, Serializable ser, String file) { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = context.openFileOutput(file, Context.MODE_PRIVATE); oos = new ObjectOutputStream(fos); Log.i(TAG, "save object to cache key =" + file); oos.writeObject(ser); oos.flush(); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { oos.close(); } catch (Exception e) { } try { fos.close(); } catch (Exception e) { } } } /** * 读取对象 * * @param file * @return */ public static Serializable readObject(Context context, String file, final long expireTime) { if (!isExistDataCache(context, file)) return null; if (isDataTimeOut(context, file, expireTime) && expireTime != 0) return null; FileInputStream fis = null; ObjectInputStream ois = null; try { fis = context.openFileInput(file); ois = new ObjectInputStream(fis); Log.i(TAG, "read object key =" + file); return (Serializable) ois.readObject(); } catch (FileNotFoundException e) { } catch (Exception e) { e.printStackTrace(); // 反序列化失败 - 删除缓存文件 if (e instanceof InvalidClassException) { File data = context.getFileStreamPath(file); data.delete(); } } finally { try { ois.close(); } catch (Exception e) { } try { fis.close(); } catch (Exception e) { } } return null; } /** * 判断缓存是否过期 * * @param context * @param file * @return */ private static boolean isDataTimeOut(Context context, String file, long exprieTime) { File data = context.getFileStreamPath(file); long time = data.lastModified(); if (System.currentTimeMillis() - time > exprieTime) { return true; } return false; } /** * 判断缓存是否存在 * * @param cachefile */ public static boolean isExistDataCache(Context context, String cachefile) { if (context == null) return false; boolean exist = false; File data = context.getFileStreamPath(cachefile); if (data.exists()) exist = true; return exist; } public static boolean deleteObject(Context context, String file) { File data = context.getFileStreamPath(file); if (data.exists()) { data.delete(); return true; } else { return false; } } }