1、序列化与反序列化工具类如下:
public class Serialize { /** * Save the appointed serializable object to local file. * @param context * @param serializable the object waited to be serialized * @param fileName the file name to store * @return */ public static boolean saveSerializable(Context context, Serializable serializable, String fileName) { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = context.openFileOutput(fileName, context.MODE_PRIVATE); oos = new ObjectOutputStream(fos); oos.writeObject(serializable); oos.flush(); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { CloseUtils.close(fos, oos); } } /** * Read the serializable object from the appointed file. * @param context * @param fileName the file name waited to be read * @return */ public static Serializable readSerializable(Context context, String fileName) { if (fileName == null || fileName.isEmpty()) return null; FileInputStream fis = null; ObjectInputStream ois = null; try { fis = context.openFileInput(fileName); ois = new ObjectInputStream(fis); return (Serializable) ois.readObject(); } catch (FileNotFoundException e) { } catch (Exception e) { e.printStackTrace(); // 反序列化失败 - 删除缓存文件 if (e instanceof InvalidClassException) { File data = context.getFileStreamPath(fileName); data.delete(); } } finally { CloseUtils.close(fis, ois); } return null; } }
2、序列化与反序列化工具类所需的依赖类如下:
public class CloseUtils { /** * Close the appointed resources. * @param closeables */ public static void close(Closeable... closeables) { for (Closeable closeable : closeables) { try { if (closeable != null) closeable.close(); } catch (IOException e) { e.printStackTrace(); } } } }
3、当需要将数据对象进行序列化时,调用saveSerializable方法即可,传入需要被序列化的对象(serializable)和序列化到的那个文件的名称(fileName)。
4、当需要从文件中反序列化出数据对象时,调用readSerializable方法即可,传入要被反序列化的文件名称(fileName),该方法将直接放回反序列化结果——一个Serializable对象。