
org.chronos.common.serialization.KryoManager Maven / Gradle / Ivy
package org.chronos.common.serialization;
import static com.google.common.base.Preconditions.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.List;
import org.chronos.common.exceptions.ChronosIOException;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.google.common.collect.Lists;
public class KryoManager {
// =====================================================================================================================
// CONSTANTS
// =====================================================================================================================
private static final int KRYO_REUSE_WRITTEN_BYTES_THRESHOLD_BYTES = 1024 * 1024 * 2; // 2MB
private static final int KRYO_REUSE_USAGE_COUNT_THRESHOLD = 2000;
// =====================================================================================================================
// STATIC FIELDS
// =====================================================================================================================
private static final ThreadLocal THREAD_LOCAL_KRYO = new ThreadLocal();
// =====================================================================================================================
// PUBLIC API
// =====================================================================================================================
public static void destroyKryo() {
THREAD_LOCAL_KRYO.remove();
}
public static byte[] serialize(final Object object) {
return getKryo().serialize(object);
}
public static T deserialize(final byte[] serialForm) {
return getKryo().deserialize(serialForm);
}
public static T deepCopy(final T element) {
return getKryo().deepCopy(element);
}
public static void serializeObjectsToFile(final File file, final Object... objects) {
checkNotNull(objects, "Precondition violation - argument 'objects' must not be NULL!");
checkNotNull(file, "Precondition violation - argument 'file' must not be NULL!");
checkArgument(file.exists(), "Precondition violation - argument 'file' must refer to an existing file!");
checkArgument(file.isFile(),
"Precondition violation - argument 'file' must refer to a file (not a directory)!");
checkArgument(file.canWrite(), "Precondition violation - argument 'file' must be writable!");
try {
getKryo().serializeToFile(file, objects);
} catch (IOException e) {
throw new ChronosIOException("Failed to serialize object to file!", e);
}
}
public static T deserializeObjectFromFile(final File file) {
checkNotNull(file, "Precondition violation - argument 'file' must not be NULL!");
checkArgument(file.exists(), "Precondition violation - argument 'file' must refer to an existing file!");
checkArgument(file.isFile(),
"Precondition violation - argument 'file' must refer to a file (not a directory)!");
checkArgument(file.canRead(), "Precondition violation - argument 'file' must be readable!");
try {
return getKryo().deserializeObjectFromFile(file);
} catch (IOException e) {
throw new ChronosIOException("Failed to deserialize object from file!", e);
}
}
public static List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy