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的协议格式

      BSON类似Java自带的Serializable, 其格式如下:
            1). 基本数据类型: 直接转换成byte[]