- 所有已知实现类:
AbstractDsonCodec,BinaryCodec,BooleanCodec,ByteArrayCodec,CollectionCodec,DoubleCodec,DurationCodec,EnumCodec,ExtDateTimeCodec,FloatCodec,InstantCodec,Int32Codec,Int64Codec,LocalDateCodec,LocalDateTimeCodec,LocalTimeCodec,MapCodec,MapEncodeProxyCodec,MoreArrayCodecs.BooleanArrayCodec,MoreArrayCodecs.CharArrayCodec,MoreArrayCodecs.DoubleArrayCodec,MoreArrayCodecs.FloatArrayCodec,MoreArrayCodecs.IntArrayCodec,MoreArrayCodecs.LongArrayCodec,MoreArrayCodecs.ObjectArrayCodec,MoreArrayCodecs.ShortArrayCodec,MoreArrayCodecs.StringArrayCodec,ObjectLitePtrCodec,ObjectPtrCodec,StringCodec,TimestampCodec
DsonCodecImpl协同工作,为典型的桥接模式。
实体类序列化工具类,每一个DsonCodec只负责一个固定类型的解析。
生成的代码会实现该接口,用户手动实现编解码时也实现该接口。
-------------------------------什么时候手写实现?-----------------------
1. 一般而言,建议使用注解DsonSerializable,并遵循相关规范,由注解处理器生成的类负责解析,而不是手写实现DsonCodec。
一旦手写实现,必须持久的进行维护。
2. 如果对象存在复杂的构造过程的时候,考虑手动实现。
3. 对象存在final字段时,考虑手动实现(最好只负责final字段解析)
4. 单例和池化对象,如果想解析时避免创建新的对象,可以自实现Codec处理。
-------------------------------实现时要注意什么?----------------------
1. 必须保证线程安全,最好是无状态的。
2. 最好实现为目标类的静态内部类,且最好是private级别,不要暴露给外层。
3. 需提供无参构造方法(可以private,否则不会被扫描到) - 反射创建对象。
- 作者:
- wjybxx date 2023/4/3
-
方法概要
修饰符和类型方法说明default boolean获取负责编解码的类对象default boolean当前对象是否按照数组格式编码 1.默认情况下,Map是被看做普通的数组的 2.该属性只有autoStartEnd()为true的时候有效。readObject(DsonObjectReader reader, TypeInfo<?> typeInfo, Supplier<? extends T> factory) 从输入流中解析指定对象。voidwriteObject(DsonObjectWriter writer, T instance, TypeInfo<?> typeInfo, ObjectStyle style) 将对象写入输出流。
-
方法详细资料
-
getEncoderClass
获取负责编解码的类对象 -
writeObject
将对象写入输出流。 将对象及其所有超类定义的所有要序列化的字段写入输出流。注意:name在外部已写入,因此基础类型写入value时name传null或空字符串。
- 参数:
typeInfo- 对象的类型信息(声明类型)style- 外部期望的输出格式
-
readObject
从输入流中解析指定对象。 它应该创建对象,并反序列化该类及其所有超类定义的所有要序列化的字段。注意:name在外部已读取,因此读取value时使用
DsonObjectReader.getCurrentName()。- 参数:
typeInfo- 对象的类型信息(声明类型)factory- 实例工厂
-
autoStartEnd
default boolean autoStartEnd()该方法用于告知DsonCodecImpl是否自动调用以下方法:DsonObjectWriter.writeStartObject(String, Object, TypeInfo)()}DsonObjectWriter.writeEndObject()DsonObjectReader.readStartObject(String)DsonObjectReader.readEndObject()Q:禁用该属性有什么用? A: 对于写;你可以将当前转换为另一个对象,然后再使用对应的codec进行编码;对于读:你可以使用另一个codec来解码当前二进制对象。 即:关闭该属性可以实现读替换(readReplace)和写替换(writeReplace)功能。 另外,还可以自行决定是写为Array还是Object。
-
isWriteAsArray
default boolean isWriteAsArray()当前对象是否按照数组格式编码 1.默认情况下,Map是被看做普通的数组的 2.该属性只有autoStartEnd()为true的时候有效。
-