package com.yaoyumeng.v2ex.model; import android.content.Context; import com.yaoyumeng.v2ex.utils.FileUtils; 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; import java.util.ArrayList; /** * Created by yw on 2015/5/4. */ public class PersistenceHelper { private static final String TAG = "PersistenceHelper"; public static boolean saveObject(Context cxt, Serializable obj, String file) { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = cxt.openFileOutput(file, Context.MODE_PRIVATE); oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.flush(); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { oos.close(); } catch (Exception e) { } try { fos.close(); } catch (Exception e) { } } } public static <T extends V2EXModel> boolean saveModel(Context cxt, T obj, String file) { return saveObject(cxt, obj, file); } public static <T extends V2EXModel> boolean saveModelList(Context cxt, ArrayList<T> objs, String file) { return saveObject(cxt, objs, file); } public static Serializable loadObject(Context cxt, String file) { if (!FileUtils.isExistDataCache(cxt, file)) return null; FileInputStream fis = null; ObjectInputStream ois = null; try { fis = cxt.openFileInput(file); ois = new ObjectInputStream(fis); Object obj = ois.readObject(); return (Serializable) obj; } catch (FileNotFoundException e) { } catch (Exception e) { e.printStackTrace(); //反序列化失败 - 删除缓存文件 if (e instanceof InvalidClassException) { File data = cxt.getFileStreamPath(file); data.delete(); } } finally { try { ois.close(); } catch (Exception e) { } try { fis.close(); } catch (Exception e) { } } return null; } public static <T extends V2EXModel> T loadModel(Context cxt, String file) { return (T) loadObject(cxt, file); } public static <T extends V2EXModel> ArrayList<T> loadModelList(Context cxt, String file) { return (ArrayList<T>) loadObject(cxt, file); } }