- 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 <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 e2) {}
+ return null;
+ }
+ objects.put(filename, object);
+ return resultClass.cast(object);
+ } catch (ClassCastException e) {
+ return null;
+ }