代码:
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,
跟原始数据不就相同了
分 --> |