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

org.davidmoten.rx2.io.internal.DefaultSerializer Maven / Gradle / Ivy

package org.davidmoten.rx2.io.internal;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.nio.ByteBuffer;

import org.davidmoten.rx2.io.SerializerDeserializer;

import com.github.davidmoten.guavamini.annotations.VisibleForTesting;

public final class DefaultSerializer implements SerializerDeserializer {

    private final int bufferSize;

    private static final DefaultSerializer instance = new DefaultSerializer<>(128);

    @SuppressWarnings("unchecked")
    public static final  DefaultSerializer instance() {
        return (DefaultSerializer) instance;
    }

    public DefaultSerializer(int bufferSize) {
        this.bufferSize = bufferSize;
    }

    @Override
    public ByteBuffer serialize(T t) {
        NoCopyByteArrayOutputStream bytes = new NoCopyByteArrayOutputStream(bufferSize);
        serialize(t, bytes);
        return bytes.asByteBuffer();
    }

    @VisibleForTesting
    static  void serialize(T t, OutputStream bytes) {
        try (ObjectOutputStream oos = new ObjectOutputStream(bytes)) {
            oos.writeObject(t);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public T deserialize(ByteBuffer bb) {
        try (ObjectInputStream ois = new ObjectInputStream(new ByteBufferInputStream(bb))) {
            return (T) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy