package fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer;
import com.intellij.util.io.DataExternalizer;
import org.jetbrains.annotations.NotNull;
import java.io.*;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class ObjectStreamDataExternalizer<T extends Serializable> implements DataExternalizer<T> {
@Override
public void save(@NotNull DataOutput out, T value) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ObjectOutput output = new ObjectOutputStream(stream);
output.writeObject(value);
out.writeInt(stream.size());
out.write(stream.toByteArray());
}
@Override
public T read(@NotNull DataInput in) throws IOException {
int bufferSize = in.readInt();
byte[] buffer = new byte[bufferSize];
in.readFully(buffer, 0, bufferSize);
ByteArrayInputStream stream = new ByteArrayInputStream(buffer);
ObjectInput input = new ObjectInputStream(stream);
T object = null;
try {
object = (T) input.readObject();
} catch (ClassNotFoundException | ClassCastException ignored) {
}
return object;
}
}