All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.javakaffee.kryoserializers.guava.ImmutableTableSerializer Maven / Gradle / Ivy

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.ImmutableTable;

/**
 * A kryo {@link Serializer} for guava-libraries {@link ImmutableTable}.
 */
public class ImmutableTableSerializer extends TableSerializerBase> {

    private static final boolean HANDLES_NULL = false;
    private static final boolean IMMUTABLE = true;

    public ImmutableTableSerializer() {
        super(HANDLES_NULL, IMMUTABLE);
    }

    @Override
    public void write(Kryo kryo, Output output, ImmutableTable immutableTable) {
        super.writeTable(kryo, output, immutableTable);
    }

    @Override
    public ImmutableTable read(Kryo kryo, Input input, Class> type) {
        final ImmutableTable.Builder builder = ImmutableTable.builder();
        super.readTable(kryo, input, new CellConsumer() {
            @Override
            public void accept(R r, C c, V v) {
                builder.put(r, c, v);
            }
        });
        return builder.build();
    }

    /**
     * Creates a new {@link ImmutableTableSerializer} and registers its serializer.
     *
     * @param kryo the {@link Kryo} instance to set the serializer on
     */
    public static void registerSerializers(final Kryo kryo) {

        // ImmutableTable (abstract class)
        //  +- SparseImmutableTable
        //  |   SparseImmutableTable
        //  +- DenseImmutableTable
        //  |   Used when more than half of the cells have values
        //  +- SingletonImmutableTable
        //  |   Optimized for Table with only 1 element.

        final ImmutableTableSerializer serializer = new ImmutableTableSerializer();

        kryo.register(ImmutableTable.class, serializer); // ImmutableTable
        kryo.register(ImmutableTable.of().getClass(), serializer); // SparseImmutableTable
        kryo.register(ImmutableTable.of(1, 2, 3).getClass(), serializer);  // SingletonImmutableTable

        kryo.register(ImmutableTable.builder()
                .put("a", 1, 1)
                .put("b", 1, 1)
                .build().getClass(), serializer); // DenseImmutableTable

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy