protostuff 反序列数组问题

[复制链接]
查看11 | 回复0 | 2021-1-27 05:40:48 | 显示全部楼层 |阅读模式
代码:
publicclassTestBean{
privateLongid;
privateDouble[][]values;
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
}
publicDouble[][]getValues(){
returnvalues;
}
publicvoidsetValues(Double[][]values){
this.values=values;
}
}
序列化与测试代码:
publicclassProstufferSerializeImplimplementsISerializer{
privatestaticMap,Schema>cachedSchema=newConcurrentHashMap,Schema>();
privatestaticObjenesisobjenesis=newObjenesisStd(true);
@SuppressWarnings("unchecked")
privatestaticSchemagetSchema(Classcls){
Schemaschema=(Schema)cachedSchema.get(cls);
if(schema==null){
schema=RuntimeSchema.createFrom(cls);
if(schema!=null){
cachedSchema.put(cls,schema);
}
}
returnschema;
}
/**
*序列化
*/
@SuppressWarnings("unchecked")
publicbyte[]serialize(Tobj){
Classcls=(Class)obj.getClass();
LinkedBufferbuffer=LinkedBuffer
.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
byte[]bytes=null;
try{
Schemaschema=getSchema(cls);
bytes=ProtostuffIOUtil.toByteArray(obj,schema,buffer);
}catch(Exceptione){
thrownewIllegalStateException(e.getMessage(),e);
}finally{
buffer.clear();
}
returnbytes;
}
/**
*反序列化
*/
publicTdeserialize(byte[]data,Classcls){
try{
Tmessage=(T)objenesis.newInstance(cls);
Schemaschema=getSchema(cls);
ProtostuffIOUtil.mergeFrom(data,message,schema);
returnmessage;
}catch(Exceptione){
thrownewIllegalStateException(e.getMessage(),e);
}
}
publicstaticvoidmain(String[]args){
TestBeana=newTestBean();
a.setId(1L);
//a.setDataDate(newDate(System.currentTimeMillis()));
//a.setUpdateDate(newDate(System.currentTimeMillis()));
Double[][]x={{11.11,null,null,null,11.12,null,null,null,11.13,null,null,null},
{22.22,null,null,null,22.23,null,null,null,22.24,null,null,null},
{33.33,null,null,null,33.34,null,null,null,33.35,null,null,null}};
//Double[][]x={{11.11,-1D,-1D,-1D,11.12,-1D,-1D,-1D,11.13,-1D,-1D,-1D},
//{22.22,-1D,-1D,-1D,22.23,-1D,-1D,-1D,22.24,-1D,-1D,-1D},
//{33.33,-1D,-1D,-1D,33.34,-1D,-1D,-1D,33.35,-1D,-1D,-1D}};
a.setValues(x);
ProstufferSerializeImplimpl=newProstufferSerializeImpl();
byte[]b=impl.serialize(a);
TestBeanbb=impl.deserialize(b,TestBean.class);
System.out.println();
}
}
程序执行结果
=====11.11,11.12,11.13,null,null,null,null,null,null,null,null,null,
=====22.22,22.23,22.24,null,null,null,null,null,null,null,null,null,
=====33.33,33.34,33.35,null,null,null,null,null,null,null,null,null,
跟原始数据不就相同了
分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行