UE5 系统浏览之 Serialization(序列化系统)

简介: 今天来梳理 序列化系统 FArchive 是序列化系统的基类,他拥有一些列的子类用来做具体实现。序列化系统有一个单独的模块,路径如下 Engine/Source/Runtime/Core/Public/Serialization

关键的序列化流程函数

  1. 对象序列化入口 (UObject::Serialize)
  2. 属性序列化核心 (SerializeTaggedProperties)
  3. 网络复制序列化 (UActorComponent::ReplicatedProperties)
  4. 资源包序列化 (FPackageWriter::WritePackage)

FArchiveState 核心函数

属性 描述 典型用途
bIsLoading 判断当前为读取模式 条件序列化逻辑
bIsSaving 判断当前为写入模式 条件序列化逻辑
bIsTextFormat 是否文本格式(JSON/XML) 开发期调试
ArIsNetArchive 是否为网络序列化 网络优化处理
ArNoDelta 是否禁用增量序列化 全量数据序列化
ArIsObjectReferenceCollector 是否只收集引用 GC引用分析

主要派生类

类名 用途
FMemoryReader -> FMemoryArchive 内存读取序列化
FMemoryWriter -> TMemoryWriter<32> -> FMemoryArchive 内存写入序列化
FObjectReader -> FMemoryArchive 对象状态读取(属于 UObject 模块)
FObjectWriter -> FMemoryArchive 对象状态写入(属于UObject 模块)
FBitReader -> FBitArchive 网络包读取(位操作)
FBitWriter -> FBitArchive 网络包写入(位操作)
FLargeMemoryReader -> FMemoryArchive 大内存块读取
FLargeMemoryWriter -> FMemoryArchive 大内存块写入
FPackageReader -> FArchiveUObject -> FArchive 资源包读取
FMemoryImageWriter 大内存块写入

序列化系统管理类

类名 职责
FUObjectSerializeContext 管理对象序列化状态(属于 UObject 模块)
FObjectAndNameAsStringProxyArchive -> FNameAsStringProxyArchive -> FArchiveProxy -> FArchive 处理对象引用的文本表示
FSerializedPropertyScope 作用域属性序列化
FArchiveSerializedPropertyChain 属性链序列化管理

阅读记录

class FArchive : private FArchiveState 继承自 一个 struct FArchiveState
FArchive 内重载了很多的 << 运算符
TArray, TMap, TSubclassOf等模板函实现在头文件中是 C++ 的标准要求
Linker是UE资源系统的神经网络负责
1. 文件 ↔ 内存的转换
2. 跨资源引用解析
3. 加载状态管理(通过ObjBeginLoadCount等
4. IO性能优化(延迟关闭、批处理)
FObjectAndNameAsStringProxyArchive 创建时会传入一个真正的 FArchive ,然后将传入的 FArchive 序列化成 string,他的**巧妙处在于,将 FArchive 放入自己内部,然后像 FArchive 一样重载 << 运算符,这样他就可以把不同类型的 FArchive 序列化成 string

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容