- }
-
- 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 <T extends Serializable> 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;
+ }
+ ObjectInputStream in = null;
+ try {
+ in = new ConstrainedOIS(new BufferedInputStream(new FileInputStream(src)));
+ object = in.readObject();
+ in.close();
+ } catch (Exception e) {
+ Log.e(getClass().getSimpleName(), "Deserialization failed: " + src, e);
+ try {
+ if (in != null) in.close();
+ } catch (IOException ignored) {}
+ return null;
+ }
+ objects.put(filename, object);
+ return resultClass.cast(object);
+ } catch (ClassCastException e) {
+ return null;
+ }
+ }
+
+ public synchronized void write(final String filename, final Serializable object) {
+ objects.put(filename, object);
+ final File dest = new File(dir, filename);
+ ObjectOutputStream out = null;
+ try {
+ out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(dest)));
+ out.writeObject(object);
+ } catch (Exception e) {
+ Log.e(getClass().getSimpleName(), "Serialization failed: " + dest, e);
+ }
+ try {
+ if (out != null) out.close();
+ } catch (IOException ignored) {}