() {
+
+ //必须与EnMember[] 顺序一致
+ private final DeMember[] deMembers = new DeMember[]{
+ DeMember.create(factory, InnerCoderEntity.class, "id"),
+ DeMember.create(factory, InnerCoderEntity.class, "val")};
+
+ //必须与DeMember[] 顺序一致
+ private final EnMember[] enMembers = new EnMember[]{
+ EnMember.create(factory, InnerCoderEntity.class, "id"),
+ EnMember.create(factory, InnerCoderEntity.class, "val")};
+
+ @Override
+ public void convertTo(Writer out, InnerCoderEntity value) {
+ if (value == null) {
+ out.writeObjectNull(InnerCoderEntity.class);
+ return;
+ }
+ out.writeObjectB(value);
+ for (EnMember member : enMembers) {
+ out.writeObjectField(member, value);
+ }
+ out.writeObjectE(value);
+ }
+
+ @Override
+ public InnerCoderEntity convertFrom(Reader in) {
+ if (in.readObjectB(InnerCoderEntity.class) == null) return null;
+ int index = 0;
+ final Object[] params = new Object[deMembers.length];
+ while (in.hasNext()) {
+ DeMember member = in.readFieldName(deMembers); //读取字段名
+ in.readBlank(); //读取字段名与字段值之间的间隔符,JSON则是跳过冒号:
+ if (member == null) {
+ in.skipValue(); //跳过不存在的字段的值, 一般不会发生
+ } else {
+ params[index++] = member.read(in);
+ }
+ }
+ 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数据格式
+ BSON类似Java自带的Serializable, 其格式如下:
+
+ 1). 基本数据类型: 直接转换成byte[]
+
+ 2). SmallString(无特殊字符且长度小于256的字符串): length(1 byte) + byte[](utf8); 通常用于类名、字段名、枚举。
+
+ 3). String: length(4 bytes) + byte[](utf8);
+
+ 4). 数组: length(4 bytes) + byte[]...
+
+ 5). Object:
+
+ 1. realclass (SmallString) (如果指定格式化的class与实体对象的class不一致才会有该值, 该值可以使用@ConvertEntity给其取个别名)
+
+ 2. 空字符串(SmallString)
+
+ 3. SIGN_OBJECTB 标记位,值固定为0xBB (short)
+
+ 4. 循环字段值:
+
+ 4.1 SIGN_HASNEXT 标记位,值固定为1 (byte)
+
+ 4.2 字段类型; 1-9为基本类型&字符串; 101-109为基本类型&字符串的数组; 127为Object
+
+ 4.3 字段名 (SmallString)
+
+ 4.4 字段的值Object
+
+ 5. SIGN_NONEXT 标记位,值固定为0 (byte)
+
+ 6. SIGN_OBJECTE 标记位,值固定为0xEE (short)
+
diff --git a/docs/source.md b/docs/source.md
deleted file mode 100644
index 15ea37cbf..000000000
--- a/docs/source.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# 数据源
-文档完善中……
\ No newline at end of file
diff --git a/src/main/java/org/redkale/convert/ConvertEntity.java b/src/main/java/org/redkale/convert/ConvertEntity.java
index b5527e19c..ef3d20692 100644
--- a/src/main/java/org/redkale/convert/ConvertEntity.java
+++ b/src/main/java/org/redkale/convert/ConvertEntity.java
@@ -5,14 +5,14 @@
*/
package org.redkale.convert;
+import java.lang.annotation.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.*;
-
/**
* 用于类名的别名, 该值必须是全局唯一
- * 使用场景: 当BSON序列化为了不指定class可以使用@ConvertEntity来取个别名。关联方法: Reader.readClassName() 和 Writer.writeClassName(String value) 。
+ * 使用场景: 当BSON序列化为了不指定class可以使用@ConvertEntity来取个别名。
+ * 关联方法: {@link org.redkale.convert.Reader#readClassName()} 和 {@link org.redkale.convert.Writer#writeClassName(java.lang.String) } 。
*
* 详情见: https://redkale.org
*