This commit is contained in:
wentch
2016-01-08 10:31:52 +08:00
parent 5cfeee4835
commit 9aca78400a
2 changed files with 15 additions and 18 deletions

View File

@@ -24,6 +24,7 @@ public class BsonTestMain {
Serializable[] sers = new Serializable[]{"aaa", 4}; Serializable[] sers = new Serializable[]{"aaa", 4};
final BsonConvert convert = BsonFactory.root().getConvert(); final BsonConvert convert = BsonFactory.root().getConvert();
byte[] bytes = convert.convertTo(sers); byte[] bytes = convert.convertTo(sers);
Utility.println("---", bytes);
Serializable[] a = convert.convertFrom(Serializable[].class, bytes); Serializable[] a = convert.convertFrom(Serializable[].class, bytes);
System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(a));
main2(args); main2(args);

View File

@@ -5,7 +5,6 @@
*/ */
package org.redkale.test.convert; package org.redkale.test.convert;
import java.util.concurrent.atomic.*;
import org.redkale.convert.*; import org.redkale.convert.*;
import org.redkale.convert.bson.*; import org.redkale.convert.bson.*;
import org.redkale.convert.json.*; import org.redkale.convert.json.*;
@@ -57,33 +56,29 @@ public class InnerCoderEntity {
@Override @Override
public void convertTo(Writer out, InnerCoderEntity value) { public void convertTo(Writer out, InnerCoderEntity value) {
if (value == null) { if (value == null) {
out.wirteClassName(null); out.writeObjectNull(InnerCoderEntity.class);
out.writeNull();
return; return;
} }
out.writeObjectB(enMembers.length, value); out.writeObjectB(value);
boolean comma = false;
for (EnMember member : enMembers) { for (EnMember member : enMembers) {
comma = member.write(out, comma, value); out.writeObjectField(member, value);
} }
out.writeObjectE(value); out.writeObjectE(value);
} }
@Override @Override
public InnerCoderEntity convertFrom(Reader in) { public InnerCoderEntity convertFrom(Reader in) {
in.readClassName(); //必须先读Class 用于BSON if (in.readObjectB(InnerCoderEntity.class) == null) return null;
if (in.readObjectB() == Reader.SIGN_NULL) return null; int index = 0;
final AtomicInteger index = new AtomicInteger();
final Object[] params = new Object[deMembers.length]; final Object[] params = new Object[deMembers.length];
while (in.hasNext()) { while (in.hasNext()) {
DeMember member = in.readField(index, deMembers); //读取字段名 DeMember member = in.readFieldName(deMembers); //读取字段名
in.skipBlank(); //跳过冒号: in.skipBlank(); //读取字段名与字段值之间的间隔符JSON则是跳过冒号:
if (member == null) { if (member == null) {
in.skipValue(); //跳过不存在的字段的值, 一般不会发生 in.skipValue(); //跳过不存在的字段的值, 一般不会发生
} else { } else {
params[index.get()] = member.read(in); params[index++] = member.read(in);
} }
index.incrementAndGet();
} }
in.readObjectE(); in.readObjectE();
return InnerCoderEntity.create(params[0] == null ? 0 : (Integer) params[0], (String) params[1]); return InnerCoderEntity.create(params[0] == null ? 0 : (Integer) params[0], (String) params[1]);
@@ -111,10 +106,11 @@ public class InnerCoderEntity {
System.out.println(json); System.out.println(json);
System.out.println(convert.convertFrom(InnerCoderEntity.class, json).toString()); System.out.println(convert.convertFrom(InnerCoderEntity.class, json).toString());
final BsonConvert convert2= BsonFactory.root().getConvert(); final BsonConvert convert2 = BsonFactory.root().getConvert();
byte[] bs = convert2.convertTo(record); byte[] bs = convert2.convertTo(InnerCoderEntity.class, null);
Utility.println("--", bs); Utility.println("--", bs);
System.out.println(convert2.convertFrom(InnerCoderEntity.class, bs).toString()); InnerCoderEntity r = convert2.convertFrom(InnerCoderEntity.class, bs);
System.out.println(r);
} }
} }