Bssom.Net对于读取和写入的入口并不是直接使用原生的Byte[], 而是提供了缓冲区接口IBssomBuffer和写入器接口IBssomBufferWriter.
与原生的byte[]不同, 接口将更加灵活, 实现IBssomBuffer后可以从任意来源来读取数据, 实现IBssomBufferWriter后可以将数据写在任意地方(比如非连续的片段)
IBssomBuffer是一个用于序列化的缓冲区接口, 提供了读取的行为.
方法 描述Position 缓冲区中的当前位置
ReadRef 从当前缓冲区中的位置读取指定大小序列的引用
Seek 设置当前缓冲区的位置
SeekWithOutVerify 设置当前缓冲区的位置, 并且不对position的边界进行验证
TryReadFixedRef 尝试从当前缓冲区中的位置读取一个可以固定的字节序列的引用, 当进行Seek操作的时候不会影响被固定字节的引用位置
UnFixed 用于取消由TryReadFixedRef所固定的引用, 此方法的调用始终和TryReadFixedRef对称
IBssomBufferWriter
IBssomBufferWriter是基于缓冲区的写入接口, 提供了写入行为
方法 描述Buffered 在缓冲区中已写入字节的数目
Advance 用于指示已写入缓冲区的部分
Position 写入器的当前位置
Seek 设置当前写入器的位置
SeekWithOutVerify 设置当前写入器的位置, 并且不对Buffered的边界进行验证
GetRef 从当前位置获取用于写入的字节序列的引用
CanGetSizeRefForProvidePerformanceInTryWrite 在字段编组中, 当前位置是否能提供指定大小的字节序列引用以用来提供内部某些类型写入的性能
GetBssomBuffer 获取当前写入器所使用的缓冲区
Bssom.Net内部已经对byte[], Stream进行了IBssomBuffer和IBssomBufferWriter接口的封装, 用户无需手动封装
3.格式化器格式化是Bssom.Net将.Net对象和Bssom格式进行互相转换的一个过程. Bssom.Net通过IBssomFormatter<T>来实现对对象的格式化.
API 描述Size 获取对象被序列化后的大小
Serialize 将对象序列化成Bssom二进制格式
Deserialize 将Bssom二进制格式反序列化成对象
Bssom.Net内部已经内置了许多格式化器, 如.NET的基元类型, 键值对类型, 可迭代类型... 他们在Bssom.Serializer.Formatters命名空间下, 你可以找到它并直接调用它.
如果你不需要特殊的处理某个类型的话, 那么这些格式化器基本可以覆盖你的大部分需求. 而如何找到格式化器, 这则是解析器所需要做的.
4.解析器解析是将.Net类型对象获取到对应的格式化器的一个过程.Bssom.Net通过IFormatterResolver来实现对对象的解析.
API 描述GetFormatter 获取对象的格式化器实例
解析器通常具备解析类型和保存格式化器这两种功能, Bssom.Net中已实现的解析器在内部会对.net类型进行格式化器的查找, 然后通过静态泛型的特性缓存被找到的格式化器, 完成了将一个或一组.net类型绑定到对应的格式化器的这样过程.
IFormatterResolver是Bssom.NET开始对对象序列化的最上层的入口, 他们在Bssom.Serializer.Resolvers命名空间下.
名称 描述PrimitiveResolver 该解析器提供了sbyte,Int16,Int32,Int64,byte,UInt16,UInt32,UInt64,Single,Double,bool,char,Guid,Decimal,string,DateTime的类型的解析器
AttributeFormatterResolver 获取并提供用户自定义格式化器的实例
BuildInResolver 提供了StringBuilder,BitArray,DataTable等类型的解析器
BssomValueResolver 提供了BssomValue类型的解析器
IDictionaryResolver 获取和生成具有IDictionary行为的类型的解析器, 该解析器抽象了BCL中对于键值对定义的行为规则, 为满足该规则的对象进行动态解析代码的生成.在解析器内部, 将通过运行时的配置选项来选择Map1或Map2的两种格式
ICollectionResolver 获取和生成具有IColloction行为的类型的解析器, 该解析器抽象了BCL中对于收集器定义的行为规则, 为满足该规则的对象进行动态解析代码的生成. 在解析器内部, 如果集合中的元素类型为基元类型, 则将其解析成Array1格式, 否则解析为Array2格式
MapCodeGenResolver 获取和生成对象的公开字段和属性进行BssomMap类型编码的解析器, 若对象为接口, 则会自动生成该接口的实现作为反序列化的载体.在解析器内部, 始终将类型解析为Map2格式, 且提供Map1和Map2两种格式的反序列化代码
ObjectResolver 提供了Object类型的解析器
CompositedResolver 复合解析器,组合了Object,Primitive,Attribute,BssomValue,BuildIn,IDictionary,ICollection,MapCodeGen解析器