-
Notifications
You must be signed in to change notification settings - Fork 121
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
495 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
src/main/java/de/javakaffee/kryoserializers/guava/ArrayListMultimapSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
import com.esotericsoftware.kryo.Serializer; | ||
import com.esotericsoftware.kryo.io.Input; | ||
import com.esotericsoftware.kryo.io.Output; | ||
|
||
import com.google.common.collect.ArrayListMultimap; | ||
|
||
/** | ||
* A kryo {@link Serializer} for guava-libraries {@link ArrayListMultimap}. | ||
* This does not yet support {@link Kryo#copy(java.lang.Object)}. | ||
*/ | ||
public class ArrayListMultimapSerializer extends MultimapSerializerBase<Object, Object, ArrayListMultimap<Object, Object>> { | ||
|
||
private static final boolean DOES_NOT_ACCEPT_NULL = false; | ||
|
||
private static final boolean IMMUTABLE = false; | ||
|
||
public ArrayListMultimapSerializer() { | ||
super(DOES_NOT_ACCEPT_NULL, IMMUTABLE); | ||
} | ||
|
||
@Override | ||
public void write(Kryo kryo, Output output, ArrayListMultimap<Object, Object> multimap) { | ||
writeMultimap(kryo, output, multimap); | ||
} | ||
|
||
@Override | ||
public ArrayListMultimap<Object, Object> read(Kryo kryo, Input input, Class<ArrayListMultimap<Object, Object>> type) { | ||
final ArrayListMultimap<Object, Object> multimap = ArrayListMultimap.create(); | ||
readMultimap(kryo, input, multimap); | ||
return multimap; | ||
} | ||
|
||
/** | ||
* Creates a new {@link ArrayListMultimapSerializer} and registers its serializer. | ||
* | ||
* @param kryo the {@link Kryo} instance to set the serializer on | ||
*/ | ||
public static void registerSerializers(final Kryo kryo) { | ||
final ArrayListMultimapSerializer serializer = new ArrayListMultimapSerializer(); | ||
kryo.register(ArrayListMultimap.class, serializer); | ||
} | ||
} |
45 changes: 45 additions & 0 deletions
45
src/main/java/de/javakaffee/kryoserializers/guava/HashMultimapSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
import com.esotericsoftware.kryo.Serializer; | ||
import com.esotericsoftware.kryo.io.Input; | ||
import com.esotericsoftware.kryo.io.Output; | ||
|
||
import com.google.common.collect.HashMultimap; | ||
|
||
/** | ||
* A kryo {@link Serializer} for guava-libraries {@link HashMultimap}. | ||
* This does not yet support {@link Kryo#copy(java.lang.Object)}. | ||
*/ | ||
public class HashMultimapSerializer extends MultimapSerializerBase<Object, Object, HashMultimap<Object, Object>> { | ||
|
||
private static final boolean DOES_NOT_ACCEPT_NULL = false; | ||
|
||
private static final boolean IMMUTABLE = false; | ||
|
||
public HashMultimapSerializer() { | ||
super(DOES_NOT_ACCEPT_NULL, IMMUTABLE); | ||
} | ||
|
||
@Override | ||
public void write(Kryo kryo, Output output, HashMultimap<Object, Object> multimap) { | ||
writeMultimap(kryo, output, multimap); | ||
} | ||
|
||
@Override | ||
public HashMultimap<Object, Object> read(Kryo kryo, Input input, Class<HashMultimap<Object, Object>> type) { | ||
final HashMultimap<Object, Object> multimap = HashMultimap.create(); | ||
readMultimap(kryo, input, multimap); | ||
return multimap; | ||
} | ||
|
||
/** | ||
* Creates a new {@link HashMultimapSerializer} and registers its serializer. | ||
* | ||
* @param kryo the {@link Kryo} instance to set the serializer on | ||
*/ | ||
public static void registerSerializers(final Kryo kryo) { | ||
final HashMultimapSerializer serializer = new HashMultimapSerializer(); | ||
kryo.register(HashMultimap.class, serializer); | ||
} | ||
} |
45 changes: 45 additions & 0 deletions
45
src/main/java/de/javakaffee/kryoserializers/guava/LinkedHashMultimapSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
import com.esotericsoftware.kryo.Serializer; | ||
import com.esotericsoftware.kryo.io.Input; | ||
import com.esotericsoftware.kryo.io.Output; | ||
|
||
import com.google.common.collect.LinkedHashMultimap; | ||
|
||
/** | ||
* A kryo {@link Serializer} for guava-libraries {@link LinkedHashMultimap}. | ||
* This does not yet support {@link Kryo#copy(java.lang.Object)}. | ||
*/ | ||
public class LinkedHashMultimapSerializer extends MultimapSerializerBase<Object, Object, LinkedHashMultimap<Object, Object>> { | ||
|
||
private static final boolean DOES_NOT_ACCEPT_NULL = false; | ||
|
||
private static final boolean IMMUTABLE = false; | ||
|
||
public LinkedHashMultimapSerializer() { | ||
super(DOES_NOT_ACCEPT_NULL, IMMUTABLE); | ||
} | ||
|
||
@Override | ||
public void write(Kryo kryo, Output output, LinkedHashMultimap<Object, Object> multimap) { | ||
writeMultimap(kryo, output, multimap); | ||
} | ||
|
||
@Override | ||
public LinkedHashMultimap<Object, Object> read(Kryo kryo, Input input, Class<LinkedHashMultimap<Object, Object>> type) { | ||
final LinkedHashMultimap<Object, Object> multimap = LinkedHashMultimap.create(); | ||
readMultimap(kryo, input, multimap); | ||
return multimap; | ||
} | ||
|
||
/** | ||
* Creates a new {@link LinkedHashMultimapSerializer} and registers its serializer. | ||
* | ||
* @param kryo the {@link Kryo} instance to set the serializer on | ||
*/ | ||
public static void registerSerializers(final Kryo kryo) { | ||
final LinkedHashMultimapSerializer serializer = new LinkedHashMultimapSerializer(); | ||
kryo.register(LinkedHashMultimap.class, serializer); | ||
} | ||
} |
45 changes: 45 additions & 0 deletions
45
src/main/java/de/javakaffee/kryoserializers/guava/LinkedListMultimapSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
import com.esotericsoftware.kryo.Serializer; | ||
import com.esotericsoftware.kryo.io.Input; | ||
import com.esotericsoftware.kryo.io.Output; | ||
|
||
import com.google.common.collect.LinkedListMultimap; | ||
|
||
/** | ||
* A kryo {@link Serializer} for guava-libraries {@link LinkedListMultimap}. | ||
* This does not yet support {@link Kryo#copy(java.lang.Object)}. | ||
*/ | ||
public class LinkedListMultimapSerializer extends MultimapSerializerBase<Object, Object, LinkedListMultimap<Object, Object>> { | ||
|
||
private static final boolean DOES_NOT_ACCEPT_NULL = false; | ||
|
||
private static final boolean IMMUTABLE = false; | ||
|
||
public LinkedListMultimapSerializer() { | ||
super(DOES_NOT_ACCEPT_NULL, IMMUTABLE); | ||
} | ||
|
||
@Override | ||
public void write(Kryo kryo, Output output, LinkedListMultimap<Object, Object> multimap) { | ||
writeMultimap(kryo, output, multimap); | ||
} | ||
|
||
@Override | ||
public LinkedListMultimap<Object, Object> read(Kryo kryo, Input input, Class<LinkedListMultimap<Object, Object>> type) { | ||
final LinkedListMultimap<Object, Object> multimap = LinkedListMultimap.create(); | ||
readMultimap(kryo, input, multimap); | ||
return multimap; | ||
} | ||
|
||
/** | ||
* Creates a new {@link LinkedListMultimapSerializer} and registers its serializer. | ||
* | ||
* @param kryo the {@link Kryo} instance to set the serializer on | ||
*/ | ||
public static void registerSerializers(final Kryo kryo) { | ||
final LinkedListMultimapSerializer serializer = new LinkedListMultimapSerializer(); | ||
kryo.register(LinkedListMultimap.class, serializer); | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
src/main/java/de/javakaffee/kryoserializers/guava/MultimapSerializerBase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import java.util.Map; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
import com.esotericsoftware.kryo.Serializer; | ||
import com.esotericsoftware.kryo.io.Input; | ||
import com.esotericsoftware.kryo.io.Output; | ||
|
||
import com.google.common.collect.Multimap; | ||
|
||
public abstract class MultimapSerializerBase<K, V, T extends Multimap<K, V>> extends Serializer<T> { | ||
|
||
public MultimapSerializerBase(boolean acceptsNull, boolean immutable) { | ||
super(acceptsNull, immutable); | ||
} | ||
|
||
protected void writeMultimap(Kryo kryo, Output output, Multimap<K, V> multimap) { | ||
output.writeInt(multimap.size(), true); | ||
for (final Map.Entry<K, V> entry : multimap.entries()) { | ||
kryo.writeClassAndObject(output, entry.getKey()); | ||
kryo.writeClassAndObject(output, entry.getValue()); | ||
} | ||
} | ||
|
||
protected void readMultimap(Kryo kryo, Input input, Multimap<K, V> multimap) { | ||
final int size = input.readInt(true); | ||
for (int i = 0; i < size; ++i) { | ||
final K key = (K) kryo.readClassAndObject(input); | ||
final V value = (V) kryo.readClassAndObject(input); | ||
multimap.put(key, value); | ||
} | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
src/main/java/de/javakaffee/kryoserializers/guava/TreeMultimapSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
import com.esotericsoftware.kryo.Serializer; | ||
import com.esotericsoftware.kryo.io.Input; | ||
import com.esotericsoftware.kryo.io.Output; | ||
|
||
import com.google.common.collect.TreeMultimap; | ||
|
||
/** | ||
* A kryo {@link Serializer} for guava-libraries {@link TreeMultimap}. | ||
* The default comparator is assumed so the multimaps are not null-safe. | ||
* This does not yet support {@link Kryo#copy(java.lang.Object)}. | ||
*/ | ||
public class TreeMultimapSerializer extends MultimapSerializerBase<Comparable, Comparable, TreeMultimap<Comparable, Comparable>> { | ||
|
||
/* assumes default comparator */ | ||
private static final boolean DOES_NOT_ACCEPT_NULL = true; | ||
|
||
private static final boolean IMMUTABLE = false; | ||
|
||
public TreeMultimapSerializer() { | ||
super(DOES_NOT_ACCEPT_NULL, IMMUTABLE); | ||
} | ||
|
||
@Override | ||
public void write(Kryo kryo, Output output, TreeMultimap<Comparable, Comparable> multimap) { | ||
writeMultimap(kryo, output, multimap); | ||
} | ||
|
||
@Override | ||
public TreeMultimap<Comparable, Comparable> read(Kryo kryo, Input input, Class<TreeMultimap<Comparable, Comparable>> type) { | ||
final TreeMultimap<Comparable, Comparable> multimap = TreeMultimap.create(); | ||
readMultimap(kryo, input, multimap); | ||
return multimap; | ||
} | ||
|
||
/** | ||
* Creates a new {@link TreeMultimapSerializer} and registers its serializer. | ||
* | ||
* @param kryo the {@link Kryo} instance to set the serializer on | ||
*/ | ||
public static void registerSerializers(final Kryo kryo) { | ||
final TreeMultimapSerializer serializer = new TreeMultimapSerializer(); | ||
kryo.register(TreeMultimap.class, serializer); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/test/java/de/javakaffee/kryoserializers/guava/ArrayListMultimapSerializerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import de.javakaffee.kryoserializers.KryoTest; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
|
||
import com.google.common.collect.ArrayListMultimap; | ||
|
||
import org.testng.annotations.BeforeClass; | ||
import org.testng.annotations.Test; | ||
|
||
public class ArrayListMultimapSerializerTest extends MultimapSerializerTestBase { | ||
|
||
private Kryo _kryo; | ||
|
||
@BeforeClass | ||
public void initializeKyroWithSerializer() { | ||
_kryo = new Kryo(); | ||
ArrayListMultimapSerializer.registerSerializers(_kryo); | ||
} | ||
|
||
@Test(dataProvider = "Google Guava multimaps") | ||
public void testMultimap(Object[] contents) { | ||
final ArrayListMultimap<Object, Object> multimap = ArrayListMultimap.create(); | ||
populateMultimap(multimap, contents); | ||
final byte[] serialized = KryoTest.serialize(_kryo, multimap); | ||
final ArrayListMultimap<Object, Object> deserialized = KryoTest.deserialize(_kryo, serialized, ArrayListMultimap.class); | ||
assertEqualMultimaps(false, true, deserialized, multimap); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/test/java/de/javakaffee/kryoserializers/guava/HashMultimapSerializerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package de.javakaffee.kryoserializers.guava; | ||
|
||
import de.javakaffee.kryoserializers.KryoTest; | ||
|
||
import com.esotericsoftware.kryo.Kryo; | ||
|
||
import com.google.common.collect.HashMultimap; | ||
|
||
import org.testng.annotations.BeforeClass; | ||
import org.testng.annotations.Test; | ||
|
||
public class HashMultimapSerializerTest extends MultimapSerializerTestBase { | ||
|
||
private Kryo _kryo; | ||
|
||
@BeforeClass | ||
public void initializeKyroWithSerializer() { | ||
_kryo = new Kryo(); | ||
HashMultimapSerializer.registerSerializers(_kryo); | ||
} | ||
|
||
@Test(dataProvider = "Google Guava multimaps") | ||
public void testMultimap(Object[] contents) { | ||
final HashMultimap<Object, Object> multimap = HashMultimap.create(); | ||
populateMultimap(multimap, contents); | ||
final byte[] serialized = KryoTest.serialize(_kryo, multimap); | ||
final HashMultimap<Object, Object> deserialized = KryoTest.deserialize(_kryo, serialized, HashMultimap.class); | ||
assertEqualMultimaps(false, false, deserialized, multimap); | ||
} | ||
} |
Oops, something went wrong.