An example using Kryo, benchmark:
static class Foo{
String name;
Foo() {
}
Foo(String name) {
this.name = name;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Foo{");
sb.append("name='").append(name).append('\'');
sb.append('}');
return sb.toString();
}
}
public static void main(String[] args) {
Kryo kryo = new Kryo();
Output output = new Output(100);
List<Foo> foos = Arrays.asList(new Foo("foo1"), new Foo("foo2"), new Foo("foo3"));
kryo.writeObject(output, foos.subList(1, 3));
List<Foo> foosAfter = kryo.readObject(new Input(output.toBytes()), ArrayList.class);
System.out.println("before: " + foos);
System.out.println("after: " + foosAfter);
System.out.println("bytes: " + Arrays.toString(output.toBytes()));
}
Output:
before: [Foo{name='foo1'}, Foo{name='foo2'}, Foo{name='foo3'}]
after: [Foo{name='foo2'}, Foo{name='foo3'}]
bytes: [1, 2, 1, 0, 99, 104, 97, 115, 99, 104, 101, 118, 46, 117, 116 ...