java.lang.Object
cn.wjybxx.dsoncodec.ConverterOptions
允许继承扩展,子类应继续保持不可变。
- 作者:
- wjybxx date - 2023/4/17
-
嵌套类概要
嵌套类 -
字段概要
字段修饰符和类型字段说明final boolean是否写入对象基础类型字段的默认值 1.数值类型默认值为0,bool类型默认值为false 2.只在Object上下文生效final boolean是否写入对象内的null值 1.只在Object上下文生效 2.对于一般的对象可不写入,因为ObjectReader是支持随机读的final DsonReaderSettings二进制解码设置final DsonWriterSettings二进制编码设置final cn.wjybxx.base.pool.ArrayPool<byte[]> 字节数组缓存池 -- 多线程下需要注意线程安全问题final int序列化申请的字节数组大小final ClassIdPolicyclassId的写入策略static ConverterOptions默认的Optionsfinal boolean是否启用void afterDecode(ConverterOptions)钩子方法。final boolean是否启用void beforeEncode(ConverterOptions)钩子方法。final cn.wjybxx.base.pool.ObjectPool<ArrayDeque<String>> 字典key队列缓存池final intprotoBuf对应的二进制子类型 -- 其它模块依赖final boolean是否启用随机读。static final cn.wjybxx.base.pool.ObjectPool<ArrayDeque<String>> 全局共享的key队列final cn.wjybxx.base.pool.ObjectPool<StringBuilder> 字符串缓存池 -- 多线程下需要注意线程安全问题final DsonTextReaderSettings文本解码设置final DsonTextWriterSettings文本编码设置final intconverter的用途 -- 用于判断是临时序列化,还是持久化入库等final boolean是否将枚举写为字符串 1.只在文档编码中生效(DsonCodec) 2.对字典的Key也生效final boolean是否把Map编码为普通对象(文档) 1.只在文档编解码中生效(DsonCodec) 2.如果要将一个Map结构编码为普通对象,Key的运行时必须和声明类型相同,且只支持String、Integer、Long、EnumLite。 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明voidassignToBuilder(ConverterOptions.Builder builder) 子类可覆盖该方法static ConverterOptions.Builder用于快速构建少许差异的options
-
字段详细资料
-
classIdPolicy
classId的写入策略 -
appendDef
public final boolean appendDef是否写入对象基础类型字段的默认值 1.数值类型默认值为0,bool类型默认值为false 2.只在Object上下文生效基础值类型需要单独控制,因为有时候我们仅想不输出null,但要输出基础类型字段的默认值 -- 通常是在文本模式下。
-
appendNull
public final boolean appendNull是否写入对象内的null值 1.只在Object上下文生效 2.对于一般的对象可不写入,因为ObjectReader是支持随机读的 -
writeMapAsDocument
public final boolean writeMapAsDocument是否把Map编码为普通对象(文档) 1.只在文档编解码中生效(DsonCodec) 2.如果要将一个Map结构编码为普通对象,Key的运行时必须和声明类型相同,且只支持String、Integer、Long、EnumLite。 3.在不启用该选项的情况下,用户可通过字段写代理将字段转换为MapEncodeProxy,实现更精确的控制。Map不是Object
本质上讲,Map是数组,而不是普通的Object,因为标准的Map是允许复杂key的,因此Map默认应该序列化为数组。但存在两个特殊的场景: 1.与脚本语言通信 脚本语言通常没有静态语言中的字典结构,由object充当,但object不支持复杂的key作为键,通常仅支持数字和字符串作为key。 因此在与脚本语言通信时,要求将Map序列化为简单的object。 2.配置文件读写 配置文件通常是无类型的,因此读取到内存中通常是一个字典结构;程序在输出配置文件时,同样需要将字典结构输出为object结构。 -
writeEnumAsString
public final boolean writeEnumAsString是否将枚举写为字符串 1.只在文档编码中生效(DsonCodec) 2.对字典的Key也生效 -
randomRead
public final boolean randomRead是否启用随机读。 启用随机读会增加较多的开销,需要先读取为中间结构,再解码为对象;但启用随机读的数据兼容性更好。 如果不写入默认值和null值的,通常都需要启用该特性。 如果需要反复反序列化一个对象(通常是配置文件),可以先解码为中间对象,将中间对象保存下来。 另一种方式是先反序列化,然后完整序列化为字节数组,再通过字节数组反序列化 -- 可关闭随机读。 注意:启用该特性后,不再支持DsonObjectReader.readValueAsBytes(String)接口。 -
enableBeforeEncode
public final boolean enableBeforeEncode是否启用void beforeEncode(ConverterOptions)钩子方法。 默认不启用!因为启用该特性要求同一个Bean不能被多线程同时序列化 -- 只适用单线程序列化场景, -
enableAfterDecode
public final boolean enableAfterDecode是否启用void afterDecode(ConverterOptions)钩子方法。 默认启用!因为我们假设afterDecode仅依赖自身数据。 -
pbBinaryType
public final int pbBinaryTypeprotoBuf对应的二进制子类型 -- 其它模块依赖 -
usage
public final int usageconverter的用途 -- 用于判断是临时序列化,还是持久化入库等 -
bufferSize
public final int bufferSize序列化申请的字节数组大小 -
bufferPool
public final cn.wjybxx.base.pool.ArrayPool<byte[]> bufferPool字节数组缓存池 -- 多线程下需要注意线程安全问题 -
keySetPool
字典key队列缓存池 -
stringBuilderPool
字符串缓存池 -- 多线程下需要注意线程安全问题 -
binReaderSettings
二进制解码设置 -
binWriterSettings
二进制编码设置 -
textReaderSettings
文本解码设置 -
textWriterSettings
文本编码设置 -
SHARED_KEY_SET_POOL
全局共享的key队列 -
DEFAULT
默认的Options
-
-
构造器详细资料
-
ConverterOptions
-
-
方法详细资料
-
toBuilder
用于快速构建少许差异的options -
assignToBuilder
子类可覆盖该方法 -
newBuilder
-