public class PersistentObjectCache {
- private final File dir;
- private final Map<String, Object> objects = new LinkedHashMap<String, Object>();
-
- public synchronized <T> T read(final String filename, final Class<T> resultClass) {
- try {
- Object object = (objects.get(filename));
- if (object != null) {
- return resultClass.cast(object);
- }
- Log.d(getClass().getSimpleName(), "Cache miss.");
- final File src = new File(dir, filename);
- if (!src.canRead()) {
- Log.d(getClass().getSimpleName(), "File empty: " + src);
- return null;
- }
- try {
- final ObjectInputStream in = new ObjectInputStream(new FileInputStream(src));
- object = in.readObject();
- in.close();
- } catch (Exception e) {
- Log.e(getClass().getSimpleName(), "Deserialization failed: " + src, e);
- return null;
- }
- objects.put(filename, object);
- return resultClass.cast(object);
- } catch (ClassCastException e) {
- return null;
+ private final File dir;
+ private final Map<String, Object> objects = new LinkedHashMap<String, Object>();
+
+ public synchronized <T> T read(final String filename, final Class<T> resultClass) {
+ try {
+ Object object = (objects.get(filename));
+ if (object != null) {
+ return resultClass.cast(object);
+ }
+ Log.d(getClass().getSimpleName(), "Cache miss.");
+ final File src = new File(dir, filename);
+ if (!src.canRead()) {
+ Log.d(getClass().getSimpleName(), "File empty: " + src);
+ return null;
+ }
+ try {
+ final ObjectInputStream in = new ObjectInputStream(new FileInputStream(src));
+ object = in.readObject();
+ in.close();
+ } catch (Exception e) {
+ Log.e(getClass().getSimpleName(), "Deserialization failed: " + src, e);
+ return null;
+ }
+ objects.put(filename, object);
+ return resultClass.cast(object);
+ } catch (ClassCastException e) {
+ return null;
+ }
}
- }
-
- public synchronized void write(final String filename, final Object object) {
- objects.put(filename, object);
- final File dest = new File(dir, filename);
- try {
- final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(dest));
- out.writeObject(object);
- out.close();
- } catch (Exception e) {
- Log.e(getClass().getSimpleName(), "Serialization failed: " + dest, e);
+
+ public synchronized void write(final String filename, final Object object) {
+ objects.put(filename, object);
+ final File dest = new File(dir, filename);
+ try {
+ final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(dest));
+ out.writeObject(object);
+ out.close();
+ } catch (Exception e) {
+ Log.e(getClass().getSimpleName(), "Serialization failed: " + dest, e);
+ }
}
- }
- private PersistentObjectCache(final Context context) {
- final File filesDir = context.getFilesDir();
- dir = filesDir != null ? filesDir : Environment.getExternalStorageDirectory();
- if (dir == null) {
- throw new RuntimeException("context.getFilesDir() == " + context.getFilesDir() + ", Environment.getExternalStorageDirectory()=" + Environment.getExternalStorageDirectory());
+ private PersistentObjectCache(final Context context) {
+ final File filesDir = context.getFilesDir();
+ dir = filesDir != null ? filesDir : Environment.getExternalStorageDirectory();
+ if (dir == null) {
+ throw new RuntimeException("context.getFilesDir() == " + context.getFilesDir()
+ + ", Environment.getExternalStorageDirectory()="
+ + Environment.getExternalStorageDirectory());
+ }
}
- }
-
- public static synchronized PersistentObjectCache getInstance() {
- if (instance == null) {
- throw new RuntimeException("getInstance called before init.");
+
+ public static synchronized PersistentObjectCache getInstance() {
+ if (instance == null) {
+ throw new RuntimeException("getInstance called before init.");
+ }
+ return instance;
}
- return instance;
- }
- public static synchronized PersistentObjectCache init(final Context context) {
- if (instance == null) {
- instance = new PersistentObjectCache(context);
- } else {
- if (!instance.dir.equals(context.getFilesDir())) {
- throw new RuntimeException("File dir changed. old=" + instance.dir + ", new=" + context.getFilesDir());
+ public static synchronized PersistentObjectCache init(final Context context) {
+ if (instance == null) {
+ instance = new PersistentObjectCache(context);
+ } else {
+ if (!instance.dir.equals(context.getFilesDir())) {
+ throw new RuntimeException("File dir changed. old=" + instance.dir + ", new="
+ + context.getFilesDir());
+ }
}
- }
- return instance;
- }
-
- private static PersistentObjectCache instance = null;
+ return instance;
+ }
+
+ private static PersistentObjectCache instance = null;
}