package org.robotframework.ide.eclipse.main.plugin.tableeditor.dnd;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
public class ArraysSerializerDeserializer {
@SuppressWarnings("unchecked")
public static <T> T[] copy(final Class<? extends T> clazz, final T[] toCopy) {
if (toCopy.length == 0) {
return (T[]) Array.newInstance(clazz, 0);
}
try {
return deserialize(clazz, serialize(toCopy));
} catch (ClassNotFoundException | IOException e) {
throw new IllegalStateException("Unable to copy array", e);
}
}
public static <T> byte[] serialize(final T[] toSerialize) throws IOException {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream stream = new ObjectOutputStream(bos)) {
stream.writeInt(toSerialize.length);
for (int i = 0; i < toSerialize.length; i++) {
stream.writeObject(toSerialize[i]);
}
return bos.toByteArray();
}
}
@SuppressWarnings("unchecked")
public static <T> T[] deserialize(final Class<T> clazz, final byte[] toDeserialize)
throws ClassNotFoundException, IOException {
if (toDeserialize == null) {
return (T[]) Array.newInstance(clazz, 0);
}
try (ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(toDeserialize))) {
final int count = stream.readInt();
final T[] objects = (T[]) Array.newInstance(clazz, count);
for (int i = 0; i < count; i++) {
objects[i] = clazz.cast(stream.readObject());
}
return objects;
}
}
}