What steps will reproduce the problem?
1.when i want to serialize a object which contains a list in it, when the size
of list exceeds some value the following exception will happen:
java.lang.IndexOutOfBoundsException: Index: 54, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at com.esotericsoftware.kryo.util.MapReferenceResolver.getReadObject(MapReferenceResolver.java:42)
at com.esotericsoftware.kryo.Kryo.readReferenceOrNull(Kryo.java:830)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:680)
at com.baidu.rigle.log.search.service.IndexWriterServiceTest.testDataPackageKryoCodec2(IndexWriterServiceTest.java:145)
the following is the java code:
public class DataPackage2 implements Serializable {
private static final long serialVersionUID = 8645844340384510962L;
private String shardingKey;
private List<String> datas;
public String getShardingKey() {
return shardingKey;
}
public void setShardingKey(String shardingKey) {
this.shardingKey = shardingKey;
}
/**
* @return the datas
*/
public List<String> getDatas() {
return datas;
}
/**
* @param datas the datas to set
*/
public void setDatas(List<String> datas) {
this.datas = datas;
}
}
@Test
public void testDataPackageKryoCodec2() throws CoordinatorCodecException {
DataPackage2 dataPackage2 = new DataPackage2();
dataPackage2.setShardingKey("2014-12-30/44/3");
List<String> datas = new ArrayList<String>();
int size=1000;
for (int j = 0; j < size; j++) {
datas.add("" + j + "" + j + "" + j);
}
dataPackage2.setDatas(datas);
Kryo kryo = new Kryo();
Output output = new Output(new ByteArrayOutputStream());
kryo.register(DataPackage2.class);
kryo.writeObject(output, dataPackage2);
Input input = new Input(output.toBytes());
kryo.register(DataPackage2.class);
try {
DataPackage2 res = kryo.readObject(input, DataPackage2.class);
System.out.println(res);
} catch (Exception e) {
e.printStackTrace();
throw new CoordinatorCodecException(e);
}
}
when I change the value of attribute size, ex: 200, 400, 1000, when used the
200 and 400 the exception will not happen, but when used 1000 the exception
happened, maybe outof memory happened, but i don't think so, because the total
size of DataPackage2 object is small, and the exception print out means nothing
aboubt outof memory excepion.
What version of the Kryo are you using?
is it a bug? i tried many version of kryo, like: 2.22, 2.24, 3.0.0,
3.0.1-SNAPSHOT, but it didn't work
Please provide any additional information below.
Original issue reported on code.google.com by lixiaodong037 on 1 Jan 2015 at 4:39
Original issue reported on code.google.com by
lixiaodong037
on 1 Jan 2015 at 4:39