开源!一款功能强大的高性能二进制序列化器Bssom.Net (2)

Bssom.Net对于读取和写入的入口并不是直接使用原生的Byte[], 而是提供了缓冲区接口IBssomBuffer和写入器接口IBssomBufferWriter.
与原生的byte[]不同, 接口将更加灵活, 实现IBssomBuffer后可以从任意来源来读取数据, 实现IBssomBufferWriter后可以将数据写在任意地方(比如非连续的片段)

IBssomBuffer

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解析器  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwxfj.html