From 4309b7fdfbe0a7d867a960b4289d1ad986597479 Mon Sep 17 00:00:00 2001
From: wentch <22250530@qq.com>
Date: Fri, 8 Jan 2016 10:39:23 +0800
Subject: [PATCH]
---
convert.html | 54 +++++++++++++++++++++++++++-------------------------
1 file changed, 28 insertions(+), 26 deletions(-)
diff --git a/convert.html b/convert.html
index 35d6b0461..902e20232 100644
--- a/convert.html
+++ b/convert.html
@@ -74,7 +74,7 @@
resp.finishJson(record);
}
-
+
Convert 基本用法:
public class UserRecord {
@@ -140,7 +140,7 @@
}
Convert 支持非空构造函数。
1. public 的非空构造函数加上 @java.beans.ConstructorProperties 注解:
public class UserRecord {
@@ -218,7 +218,7 @@
}
Convert 支持自定义Decode、Encode。
1. 通过Factory显式的注册:
public class FileSimpleCoder<R extends Reader, W extends Writer> extends SimpledCoder<R, W, File> {
@@ -258,14 +258,6 @@
return new InnerCoderEntity(id, value);
}
- public int getId() {
- return id;
- }
-
- public String getVal() {
- return val;
- }
-
/**
* 该方法提供给Convert组件自动加载。
* 1) 方法名可以随意。
@@ -277,7 +269,7 @@
* @param factory
* @return
*/
- private static SimpledCoder<Reader, Writer, InnerCoderEntity> createConvertCoder(final org.redkale.convert.Factory factory) {
+ private static SimpledCoder<Reader, Writer, InnerCoderEntity> createConvertCoder(final org.redkale.convert.Factory factory) {
return new SimpledCoder<Reader, Writer, InnerCoderEntity>() {
//必须与EnMember[] 顺序一致
@@ -293,43 +285,53 @@
@Override
public void convertTo(Writer out, InnerCoderEntity value) {
if (value == null) {
- out.wirteClassName(null);
- out.writeNull();
+ out.writeObjectNull(InnerCoderEntity.class);
return;
}
- out.writeObjectB(enMembers.length, value);
- boolean comma = false;
+ out.writeObjectB(value);
for (EnMember member : enMembers) {
- comma = member.write(out, comma, value);
+ out.writeObjectField(member, value);
}
out.writeObjectE(value);
}
@Override
public InnerCoderEntity convertFrom(Reader in) {
- in.readClassName(); //必须先读Class 用于BSON
- if (in.readObjectB() == Reader.SIGN_NULL) return null;
- final AtomicInteger index = new AtomicInteger();
+ if (in.readObjectB(InnerCoderEntity.class) == null) return null;
+ int index = 0;
final Object[] params = new Object[deMembers.length];
while (in.hasNext()) {
- DeMember member = in.readField(index, deMembers); //读取字段名
- in.skipBlank(); //跳过冒号:
+ DeMember member = in.readFieldName(deMembers); //读取字段名
+ in.readBlank(); //读取字段名与字段值之间的间隔符,JSON则是跳过冒号:
if (member == null) {
in.skipValue(); //跳过不存在的字段的值, 一般不会发生
} else {
- params[index.get()] = member.read(in);
+ params[index++] = member.read(in);
}
- index.incrementAndGet();
}
- in.readObjectE();
+ in.readObjectE(InnerCoderEntity.class);
return InnerCoderEntity.create(params[0] == null ? 0 : (Integer) params[0], (String) params[1]);
}
};
}
+
+ public int getId() {
+ return id;
+ }
+
+ public String getVal() {
+ return val;
+ }
+
+ @Override
+ public String toString() {
+ return JsonConvert.root().convertTo(this);
+ }
+
}
BSON类似Java自带的Serializable, 其格式如下:
1). 基本数据类型: 直接转换成byte[]