From bd21e13f6dc8d4cd1d55f487a56ce837227f8fbd Mon Sep 17 00:00:00 2001 From: Dean Allen Date: Tue, 2 May 2017 16:06:48 -0700 Subject: [PATCH] Converted disk serializers to have direct access to streams --- .../android/dualcache/DemoActivity.java | 3 +- .../android/dualcache/JsonDiskSerializer.java | 52 ++++++++++++++++++ .../android/dualcache/lib/DualCacheTest.java | 54 +++++++++++++++++-- .../android/dualcache/lib/TestIssue11.java | 7 ++- .../NoRamDiskCustomSerializer.java | 2 +- .../NoRamDiskDefaultSerializer.java | 2 +- ...mCustomSerializerDiskCustomSerializer.java | 2 +- ...CustomSerializerDiskDefaultSerializer.java | 2 +- ...DefaultSerializerDiskCustomSerializer.java | 2 +- ...efaultSerializerDiskDefaultSerializer.java | 2 +- .../RamReferenceDiskCustomSerializer.java | 2 +- .../RamReferenceDiskDefaultSerializer.java | 2 +- .../android/dualcache/Builder.java | 6 +-- .../android/dualcache/DualCache.java | 39 ++++++++------ .../android/dualcache/IOUtil.java | 22 ++++++++ .../dualcache/DiskCacheSerializer.java | 27 ++++++++++ maven_push.gradle | 16 +++--- maven_push_java.gradle | 16 +++--- 18 files changed, 208 insertions(+), 50 deletions(-) create mode 100644 dualcache-jsonserializer/src/main/java/com/vincentbrison/openlibraries/android/dualcache/JsonDiskSerializer.java create mode 100644 dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/IOUtil.java create mode 100644 dualcache-serializerinterface/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DiskCacheSerializer.java diff --git a/dualcache-demoapp/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DemoActivity.java b/dualcache-demoapp/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DemoActivity.java index d8d194d..1ccf988 100644 --- a/dualcache-demoapp/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DemoActivity.java +++ b/dualcache-demoapp/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DemoActivity.java @@ -67,11 +67,12 @@ protected void onCreate(Bundle savedInstanceState) { mRamCacheSize = getIntent().getIntExtra(EXTRA_RAM_CACHE_SIZE, 50); CacheSerializer jsonSerializer = new JsonSerializer<>(String.class); + DiskCacheSerializer jsonDiskSerializer = new JsonDiskSerializer<>(String.class); mCache = new Builder(mCacheId, 1) .enableLog() .useSerializerInRam(mRamCacheSize, jsonSerializer) - .useSerializerInDisk(mDiskCacheSize, true, jsonSerializer, getApplicationContext()) + .useSerializerInDisk(mDiskCacheSize, true, jsonDiskSerializer, getApplicationContext()) .build(); mHandler = new Handler(); diff --git a/dualcache-jsonserializer/src/main/java/com/vincentbrison/openlibraries/android/dualcache/JsonDiskSerializer.java b/dualcache-jsonserializer/src/main/java/com/vincentbrison/openlibraries/android/dualcache/JsonDiskSerializer.java new file mode 100644 index 0000000..f1f1ed6 --- /dev/null +++ b/dualcache-jsonserializer/src/main/java/com/vincentbrison/openlibraries/android/dualcache/JsonDiskSerializer.java @@ -0,0 +1,52 @@ +package com.vincentbrison.openlibraries.android.dualcache; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Serializer which will serialize and deserialize object using Jackson + * converter. + * @param is the class of object to serialize/deserialize. + */ +public class JsonDiskSerializer implements DiskCacheSerializer { + private final ObjectMapper mapper; + private final Class clazz; + + /** + * Default constructor. + * @param clazz is the class of object to serialize/deserialize. + */ + public JsonDiskSerializer(Class clazz) { + this.clazz = clazz; + mapper = new ObjectMapper(); + mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); + mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); + mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + } + + @Override + public T fromStream(InputStream data) { + try { + return mapper.readValue(data, clazz); + } catch (IOException e) { + e.printStackTrace(); + } + throw new IllegalStateException(); + } + + @Override + public void writeToStream(OutputStream out, T object) { + try { + mapper.writeValue(out, object); + return; + } catch (IOException e) { + e.printStackTrace(); + } + throw new IllegalStateException(); + } +} diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/DualCacheTest.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/DualCacheTest.java index 7b3fb2b..f6ac125 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/DualCacheTest.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/DualCacheTest.java @@ -6,11 +6,14 @@ import android.util.Log; import com.vincentbrison.openlibraries.android.dualcache.CacheSerializer; +import com.vincentbrison.openlibraries.android.dualcache.DiskCacheSerializer; import com.vincentbrison.openlibraries.android.dualcache.DualCache; import com.vincentbrison.openlibraries.android.dualcache.DualCacheDiskMode; import com.vincentbrison.openlibraries.android.dualcache.DualCacheRamMode; +import com.vincentbrison.openlibraries.android.dualcache.JsonDiskSerializer; import com.vincentbrison.openlibraries.android.dualcache.JsonSerializer; import com.vincentbrison.openlibraries.android.dualcache.SizeOf; +import com.vincentbrison.openlibraries.android.dualcache.IOUtil; import com.vincentbrison.openlibraries.android.dualcache.lib.testobjects.AbstractVehicule; import com.vincentbrison.openlibraries.android.dualcache.lib.testobjects.CoolBike; import com.vincentbrison.openlibraries.android.dualcache.lib.testobjects.CoolCar; @@ -20,12 +23,16 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; @RunWith(AndroidJUnit4.class) public abstract class DualCacheTest { @@ -36,6 +43,7 @@ public abstract class DualCacheTest { protected static final int TEST_APP_VERSION = 0; protected DualCache cache; protected CacheSerializer defaultCacheSerializer; + protected JsonDiskSerializer defaultDiskCacheSerializer; private Context context; protected Context getContext() { @@ -45,6 +53,7 @@ protected Context getContext() { @Before public void setUp() throws Exception { defaultCacheSerializer = new JsonSerializer<>(AbstractVehicule.class); + defaultDiskCacheSerializer = new JsonDiskSerializer<>(AbstractVehicule.class); context = InstrumentationRegistry.getTargetContext(); } @@ -255,6 +264,45 @@ public String toString(AbstractVehicule object) { } } + public static class DiskSerializerForTesting implements DiskCacheSerializer { + private static final Charset CHARSET = Charset.forName("UTF-8"); + + @Override + public AbstractVehicule fromStream(InputStream data) throws IOException { + char[] buffer = new char[1024]; + InputStreamReader reader = new InputStreamReader(data, CHARSET); + StringBuilder builder = new StringBuilder(); + + try { + int numRead; + while ((numRead = reader.read(buffer)) != -1) { + builder.append(buffer, 0, numRead); + } + final String string = builder.toString(); + + if (string.equals(CoolBike.class.getSimpleName())) { + return new CoolBike(); + } else if (string.equals(CoolCar.class.getSimpleName())) { + return new CoolCar(); + } else { + return null; + } + } finally { + IOUtil.closeQuietly(reader); + } + } + + @Override + public void writeToStream(OutputStream out, AbstractVehicule object) throws IOException { + OutputStreamWriter writer = new OutputStreamWriter(out, CHARSET); + try { + writer.write(object.getClass().getSimpleName()); + } finally { + IOUtil.closeQuietly(writer); + } + } + } + public static class SizeOfVehiculeForTesting implements SizeOf { @Override diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/TestIssue11.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/TestIssue11.java index 69d7c5d..a20711d 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/TestIssue11.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/TestIssue11.java @@ -6,7 +6,9 @@ import com.vincentbrison.openlibraries.android.dualcache.Builder; import com.vincentbrison.openlibraries.android.dualcache.CacheSerializer; +import com.vincentbrison.openlibraries.android.dualcache.DiskCacheSerializer; import com.vincentbrison.openlibraries.android.dualcache.DualCache; +import com.vincentbrison.openlibraries.android.dualcache.JsonDiskSerializer; import com.vincentbrison.openlibraries.android.dualcache.JsonSerializer; import org.junit.After; @@ -18,7 +20,7 @@ import java.util.ArrayList; import java.util.List; -import static org.junit.Assert.assertFalse; +import static org.junit.Assert.*; /** * Test issue 11. @@ -36,10 +38,11 @@ public void setUp() throws Exception { Context context = InstrumentationRegistry.getTargetContext(); File cacheDir = new File(context.getCacheDir(), CACHE_NAME); CacheSerializer jsonSerializer = new JsonSerializer<>(String.class); + DiskCacheSerializer jsonDiskSerializer = new JsonDiskSerializer<>(String.class); mCache = new Builder(CACHE_NAME, 0) .enableLog() .useSerializerInRam(CACHE_RAM_ENTRIES, jsonSerializer) - .useSerializerInDisk(CACHE_SIZE, cacheDir, jsonSerializer) + .useSerializerInDisk(CACHE_SIZE, cacheDir, jsonDiskSerializer) .build(); } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskCustomSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskCustomSerializer.java index 5b6c576..95119b2 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskCustomSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskCustomSerializer.java @@ -15,7 +15,7 @@ public void setUp() throws Exception { .useSerializerInDisk( DISK_MAX_SIZE, true, - new DualCacheTest.SerializerForTesting(), + new DualCacheTest.DiskSerializerForTesting(), getContext()) .build(); } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskDefaultSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskDefaultSerializer.java index e2a024a..2f72d82 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskDefaultSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/NoRamDiskDefaultSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .noRam() - .useSerializerInDisk(DISK_MAX_SIZE, true, defaultCacheSerializer, getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, defaultDiskCacheSerializer, getContext()) .build(); } } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskCustomSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskCustomSerializer.java index a903d1c..0660edf 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskCustomSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskCustomSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .useSerializerInRam(RAM_MAX_SIZE, new SerializerForTesting()) - .useSerializerInDisk(DISK_MAX_SIZE, true, new SerializerForTesting(), getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, new DiskSerializerForTesting(), getContext()) .build(); } } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskDefaultSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskDefaultSerializer.java index 8cb9e0f..7bd3c7d 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskDefaultSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamCustomSerializerDiskDefaultSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .useSerializerInRam(RAM_MAX_SIZE, new SerializerForTesting()) - .useSerializerInDisk(DISK_MAX_SIZE, true, defaultCacheSerializer, getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, defaultDiskCacheSerializer, getContext()) .build(); } } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskCustomSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskCustomSerializer.java index 1e3b808..67314b3 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskCustomSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskCustomSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .useSerializerInRam(RAM_MAX_SIZE, defaultCacheSerializer) - .useSerializerInDisk(DISK_MAX_SIZE, true, new SerializerForTesting(), getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, new DiskSerializerForTesting(), getContext()) .build(); } } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskDefaultSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskDefaultSerializer.java index 6e700be..2b58169 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskDefaultSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamDefaultSerializerDiskDefaultSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .useSerializerInRam(RAM_MAX_SIZE, defaultCacheSerializer) - .useSerializerInDisk(DISK_MAX_SIZE, true, defaultCacheSerializer, getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, defaultDiskCacheSerializer, getContext()) .build(); } } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskCustomSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskCustomSerializer.java index 8659c1f..a73f436 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskCustomSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskCustomSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .useReferenceInRam(RAM_MAX_SIZE, new SizeOfVehiculeForTesting()) - .useSerializerInDisk(DISK_MAX_SIZE, true, new DualCacheTest.SerializerForTesting(), getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, new DualCacheTest.DiskSerializerForTesting(), getContext()) .build(); } } diff --git a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskDefaultSerializer.java b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskDefaultSerializer.java index 2c59274..3e4bf31 100644 --- a/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskDefaultSerializer.java +++ b/dualcache-library/src/androidTest/java/com/vincentbrison/openlibraries/android/dualcache/lib/configurationsToTest/RamReferenceDiskDefaultSerializer.java @@ -12,7 +12,7 @@ public void setUp() throws Exception { cache = new Builder(CACHE_NAME, TEST_APP_VERSION) .enableLog() .useReferenceInRam(RAM_MAX_SIZE, new SizeOfVehiculeForTesting()) - .useSerializerInDisk(DISK_MAX_SIZE, true, defaultCacheSerializer, getContext()) + .useSerializerInDisk(DISK_MAX_SIZE, true, defaultDiskCacheSerializer, getContext()) .build(); } } diff --git a/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/Builder.java b/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/Builder.java index 0ebe06f..0c7bbbf 100644 --- a/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/Builder.java +++ b/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/Builder.java @@ -26,7 +26,7 @@ public class Builder { private SizeOf sizeOf; private int maxDiskSizeBytes; private DualCacheDiskMode diskMode; - private CacheSerializer diskSerializer; + private DiskCacheSerializer diskSerializer; private File diskFolder; /** @@ -154,7 +154,7 @@ public Builder noRam() { public Builder useSerializerInDisk( int maxDiskSizeBytes, boolean usePrivateFiles, - CacheSerializer serializer, + DiskCacheSerializer serializer, Context context ) { File folder = getDefaultDiskCacheFolder(usePrivateFiles, context); @@ -172,7 +172,7 @@ public Builder useSerializerInDisk( * @return the builder. */ public Builder useSerializerInDisk( - int maxDiskSizeBytes, File diskCacheFolder, CacheSerializer serializer + int maxDiskSizeBytes, File diskCacheFolder, DiskCacheSerializer serializer ) { this.diskFolder = diskCacheFolder; this.diskMode = DualCacheDiskMode.ENABLE_WITH_SPECIFIC_SERIALIZER; diff --git a/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DualCache.java b/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DualCache.java index 076fb7f..2df23e6 100755 --- a/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DualCache.java +++ b/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DualCache.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; /** * This class intent to provide a very easy to use, reliable, highly configurable caching library @@ -38,7 +40,7 @@ public class DualCache { private final int appVersion; private final DualCacheRamMode ramMode; private final DualCacheDiskMode diskMode; - private final CacheSerializer diskSerializer; + private final DiskCacheSerializer diskSerializer; private final CacheSerializer ramSerializer; private final DualCacheLock dualCacheLock = new DualCacheLock(); private final Logger logger; @@ -52,7 +54,7 @@ public class DualCache { int maxRamSizeBytes, SizeOf sizeOf, DualCacheDiskMode diskMode, - CacheSerializer diskSerializer, + DiskCacheSerializer diskSerializer, int maxDiskSizeBytes, File diskFolder ) { @@ -154,6 +156,7 @@ public void put(String key, T object) { } if (diskMode.equals(DualCacheDiskMode.ENABLE_WITH_SPECIFIC_SERIALIZER)) { + OutputStream out = null; try { dualCacheLock.lockDiskEntryWrite(key); DiskLruCache.Editor editor = diskLruCache.edit(key); @@ -161,13 +164,15 @@ public void put(String key, T object) { // Optimization if using same serializer editor.set(0, ramSerialized); } else { - editor.set(0, diskSerializer.toString(object)); + out = editor.newOutputStream(0); + diskSerializer.writeToStream(out, object); } editor.commit(); } catch (IOException e) { logger.logError(e); } finally { dualCacheLock.unLockDiskEntryWrite(key); + IOUtil.closeQuietly(out); } } } @@ -183,7 +188,6 @@ public void put(String key, T object) { public T get(String key) { Object ramResult = null; - String diskResult = null; DiskLruCache.Snapshot snapshotObject = null; // Try to get the object from RAM. @@ -194,6 +198,8 @@ public T get(String key) { } if (ramResult == null) { + T objectFromDisk = null; + // Try to get the cached object from disk. loggerHelper.logEntryForKeyIsNotInRam(key); if (diskMode.equals(DualCacheDiskMode.ENABLE_WITH_SPECIFIC_SERIALIZER)) { @@ -208,35 +214,34 @@ public T get(String key) { if (snapshotObject != null) { loggerHelper.logEntryForKeyIsOnDisk(key); + InputStream diskResult = snapshotObject.getInputStream(0); try { - diskResult = snapshotObject.getString(0); + objectFromDisk = diskSerializer.fromStream(diskResult); } catch (IOException e) { logger.logError(e); + } finally { + IOUtil.closeQuietly(diskResult); } } else { loggerHelper.logEntryForKeyIsNotOnDisk(key); } } - T objectFromStringDisk = null; - - if (diskResult != null) { + if (objectFromDisk != null) { // Load object, no need to check disk configuration since diskresult != null. - objectFromStringDisk = diskSerializer.fromString(diskResult); - // Refresh object in ram. if (ramMode.equals(DualCacheRamMode.ENABLE_WITH_REFERENCE)) { if (diskMode.equals(DualCacheDiskMode.ENABLE_WITH_SPECIFIC_SERIALIZER)) { - ramCacheLru.put(key, objectFromStringDisk); + ramCacheLru.put(key, objectFromDisk); } } else if (ramMode.equals(DualCacheRamMode.ENABLE_WITH_SPECIFIC_SERIALIZER)) { - if (diskSerializer == ramSerializer) { - ramCacheLru.put(key, diskResult); - } else { - ramCacheLru.put(key, ramSerializer.toString(objectFromStringDisk)); - } +// if (diskSerializer == ramSerializer) { +// ramCacheLru.put(key, objectFromDisk); +// } else { + ramCacheLru.put(key, ramSerializer.toString(objectFromDisk)); +// } } - return objectFromStringDisk; + return objectFromDisk; } } else { loggerHelper.logEntryForKeyIsInRam(key); diff --git a/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/IOUtil.java b/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/IOUtil.java new file mode 100644 index 0000000..913e879 --- /dev/null +++ b/dualcache-library/src/main/java/com/vincentbrison/openlibraries/android/dualcache/IOUtil.java @@ -0,0 +1,22 @@ +package com.vincentbrison.openlibraries.android.dualcache; + +import java.io.Closeable; +import java.io.IOException; + +public final class IOUtil { + + private IOUtil() { } + + /** + * Closes the stream and swallows up the exception + */ + public static void closeQuietly(Closeable closeable) { + try { + if (closeable != null) { + closeable.close(); + } + } catch (IOException e) { + // ignore + } + } +} diff --git a/dualcache-serializerinterface/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DiskCacheSerializer.java b/dualcache-serializerinterface/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DiskCacheSerializer.java new file mode 100644 index 0000000..cfa24b4 --- /dev/null +++ b/dualcache-serializerinterface/src/main/java/com/vincentbrison/openlibraries/android/dualcache/DiskCacheSerializer.java @@ -0,0 +1,27 @@ +package com.vincentbrison.openlibraries.android.dualcache; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * This cache interface describe the way an object should be serialized/deserialized into a + * stream. + * @param is the class of object to serialized/deserialized. + */ +public interface DiskCacheSerializer { + /** + * Deserialization of a stream into an object. + * @param data is the byte array representing the serialized data. + * @return the deserialized data. + * @throws IOException if reading from the stream fails + */ + T fromStream(InputStream data) throws IOException; + + /** + * Serialization of an object into a stream. + * @param object is the object to serialize. + * @throws IOException if writing to the stream fails + */ + void writeToStream(OutputStream out, T object) throws IOException; +} diff --git a/maven_push.gradle b/maven_push.gradle index cefe570..88a5f86 100644 --- a/maven_push.gradle +++ b/maven_push.gradle @@ -69,14 +69,14 @@ afterEvaluate { project -> } signing { - allprojects { - ext."signing.password" = safePwd("keyPwd") - ext."signing.keyId" = "D376F8F6" - //ext."signing.secretKeyRingFile" = "C:/Users/Brize/AppData/Roaming/gnupg/secring.gpg" - ext."signing.secretKeyRingFile" = "/Users/vincentbrison/.gnupg/secring.gpg" - } - required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } - sign configurations.archives +// allprojects { +// ext."signing.password" = safePwd("keyPwd") +// ext."signing.keyId" = "D376F8F6" +// //ext."signing.secretKeyRingFile" = "C:/Users/Brize/AppData/Roaming/gnupg/secring.gpg" +// ext."signing.secretKeyRingFile" = "/Users/vincentbrison/.gnupg/secring.gpg" +// } +// required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } +// sign configurations.archives } task androidJavadocs(type: Javadoc) { diff --git a/maven_push_java.gradle b/maven_push_java.gradle index 2ae30fb..2a7f2bd 100644 --- a/maven_push_java.gradle +++ b/maven_push_java.gradle @@ -69,14 +69,14 @@ afterEvaluate { project -> } signing { - allprojects { - ext."signing.password" = safePwd("keyPwd") - ext."signing.keyId" = "D376F8F6" - //ext."signing.secretKeyRingFile" = "C:/Users/Brize/AppData/Roaming/gnupg/secring.gpg" - ext."signing.secretKeyRingFile" = "/Users/vincentbrison/.gnupg/secring.gpg" - } - required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } - sign configurations.archives +// allprojects { +// ext."signing.password" = safePwd("keyPwd") +// ext."signing.keyId" = "D376F8F6" +// //ext."signing.secretKeyRingFile" = "C:/Users/Brize/AppData/Roaming/gnupg/secring.gpg" +// ext."signing.secretKeyRingFile" = "/Users/vincentbrison/.gnupg/secring.gpg" +// } +// required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } +// sign configurations.archives } task javadocsJar(type: Jar) {