
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