我现在将所有可能的groovy对象包装到Wrapper类中并在此类中使用kryo,这似乎工作得很好(至少作为原型)。
public class Wrapper implements Serializable {
private static final long serialVersionUID = 889826451319869803L;
private transient Object wrapped;
public Wrapper() {
}
public Wrapper(Object wrapped) {
this.wrapped = wrapped;
}
private void writeObject(java.io.ObjectOutputStream stream) throws IOException {
Kryo kryo = new Kryo();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Output output = new Output(bos);
kryo.writeObject(output, wrapped);
output.close();
stream.writeObject(bos.toByteArray());
}
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
Kryo kryo = new Kryo();
byte[] bytes = (byte[]) stream.readObject();
ByteArrayInputStream bis = new ByteInputStream(bytes, bytes.length);
Input input = new Input(bis);
wrapped = kryo.readObject(input, LazyMap.class);
input.close();
}
}
I wrap now all the possible groovy objects into a Wrapper class and use kryo inside of this class, this seems to work quite well (at least as a prototype).
public class Wrapper implements Serializable {
private static final long serialVersionUID = 889826451319869803L;
private transient Object wrapped;
public Wrapper() {
}
public Wrapper(Object wrapped) {
this.wrapped = wrapped;
}
private void writeObject(java.io.ObjectOutputStream stream) throws IOException {
Kryo kryo = new Kryo();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Output output = new Output(bos);
kryo.writeObject(output, wrapped);
output.close();
stream.writeObject(bos.toByteArray());
}
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
Kryo kryo = new Kryo();
byte[] bytes = (byte[]) stream.readObject();
ByteArrayInputStream bis = new ByteInputStream(bytes, bytes.length);
Input input = new Input(bis);
wrapped = kryo.readObject(input, LazyMap.class);
input.close();
}
}