当前位置: 首页 > news >正文

网站关键词重要性做外贸网站买海外域名

网站关键词重要性,做外贸网站买海外域名,专业网站制作公司,建公司网站步骤前言 序列化(Serialize)和反序列化(UnSerialize)是程序领域常见的概念。对于这两个词汇我理解的是 序列化(Serialize): 变量值(int, float, string等基本类型, 或者Array,Map,或者更复杂的复合体)存储为一个文件(二进制流, 二进制文件, json, xml等格式…

前言

序列化(Serialize)反序列化(UnSerialize)是程序领域常见的概念。对于这两个词汇我理解的是

序列化(Serialize): 变量值(int, float, string等基本类型, 或者ArrayMap,或者更复杂的复合体)存储为一个文件(二进制流, 二进制文件, json, xml等格式)。

反序列化(UnSerialize): 读取文件来复原变量值。

UE4的序列化

FArchive简介

UE4的序列化一个比较核心类是FArchive, 这个类定义了对大部分基础变量类型的序列化和反序列化接口。这里得注意是FArchive的operator<<接口既包含了序列化,也包含了反序列化。判断是operator<< 此时运行的状态是序列化还是反序列化可以通过接口IsLoading(反序列化)IsSaving(序列化)。这些接口不一定有实际的实现, 很多实现是在FArchive子类里。

FArchive核心接口--void Serialize(void* V, int64 Length)

这个接口是大多数类型序列化的底层,主要是面向一段内存进行读/写FArchive.

我们自定义复杂类型的数据序列化时经常和这个接口打交道. 得注意的是Length是内存byte的个数。用法和FMemory::Copy类似。

UObject序列化

UObject的序列化也是通过FArchive, UObject被UProperty标记的变量会自动参与到序列化中。背后有一套管理机制,后续再深入篇在分析。

UObject序列化接口--void Serialize(FArchive& Ar)
virtual void Serialize(FArchive& Ar);

保存和加载UObject对象都会触发Serialize, 对于UObject未被UProperty标记的变量,又需要存储到UObject的,可以Override这个接口来自定义

对复杂类型变量自定义序列化

对于部分复杂变量类型, FArchive接口和UE其他模块没有提供的。我们只能手动自定义序列化流程.

变量类型序列化也是分解为上门的基础序列化接口.

下面讲两个经典案例

案例一: 自定义Struct序列化
struct TestStruct
{int a;float c;
}FArchive Ar;
TestStruct test;// 调用 FArchive& operator << (int& value)
Ar << test.a; // 调用 FArchive& operator << (float& value)
Ar << test.c;
案例二: TArray<int32>数组序列化

对于一个UObject里没有被UPROPERTY标记的TArray<int32>序列化。

UCLASS()
class TESTARCH_API ATest : public AActor
{GENERATED_BODY()public:	// Sets default values for this actor's propertiesATest();UFUNCTION(CallInEditor)void TestWrite();UFUNCTION(CallInEditor)void TestPrint();TArray<int32> Data;public:virtual void Serialize(FArchive& Ar) override;
};
// Sets default values
ATest::ATest()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;
}void ATest::TestWrite()
{Data.Empty();for(int32 Index = 0; Index < 10; Index++){Data.Add(Index);}
}void ATest::TestPrint()
{for(int32 Index = 0; Index < 10; Index++){if(Data.IsValidIndex(Index)){UE_LOG(LogTemp, Error, TEXT("%d"), Data[Index]);}}
}void ATest::Serialize(FArchive& Ar)
{Super::Serialize(Ar);// 反序列化(加载)if(Ar.IsLoading()){int32 Num = 0;Ar << Num;if(Num > 0){Data.Init(0, Num);Ar.Serialize(Data.GetData(), sizeof(int32) * Num);}}// 序列化(保存)else{int32 Num = Data.Num();Ar << Num;if(Num > 0){Ar.Serialize(Data.GetData(), sizeof(int32) * Num);}}
};

对于很多基础类型我们经常能轻易使用 " Operator << " 就同时处理了序列化和反序列化, 这是因为UE4 FArchive底层已经帮我们处理好两种情况下的逻辑,显得很简单。但是对于FArchive接口未覆盖的复杂类型, 需要我们手动实现相应接口时, 基本是需要分为序列化和反序列化两种情况来进行处理。

http://www.yayakq.cn/news/59181/

相关文章:

  • 做兼职的网站有哪些工作内容业务员怎样网上找客户
  • 网站建设初步规划免费建设网站公司哪家好
  • 优易官方网站网站建设的岗位职责
  • 广西住房和城乡建设厅网站南宁网站优化公司电话
  • app开发模板网站山西大同企业做网站
  • 网站空间分销wordpress评论验证码
  • 怎么自己制作网站平台网站标题 没有排名
  • 装修设计那个网站好铁门关网站建设
  • 外贸电子商务网站窝窝在线观看
  • 推荐几个的网站为什么选择当网站设计人员
  • 做网站石材推销wordpress lamp lnmp
  • 做网站导航栏目怎么做网站建设行业 知乎
  • 如何给网站绑定域名又拍云 cdn WordPress
  • 《网站设计与建设》电子书鞍山在百度做个网站多少钱
  • 怎么给钓鱼网站做防红外贸做平台好还是自己建网站好
  • phpcms 网站名称标签国外专业做汽配的网站
  • 湖北做网站推广提供常州网站建设公司
  • 欢迎访问中国建设银行网站个人客户淘宝客网站设计
  • icp网站快速备案青岛港货物跟踪查询
  • 电子商务成功网站的案例长沙互联网企业
  • 公司网站的后台h5网站设计欣赏
  • 青岛专业做商业房的网站网站服务器端口号是什么
  • 网站开发概要设计书模板网站建设品牌
  • 驻马店专业做网站公司微商商城官网
  • 天河网站建设公司排名网页设计html基础代码
  • 做音乐网站要求珠海网站建设招聘
  • 谷歌网站排名搜索引擎平台有哪些
  • 自己做网站排名好吗海口网站建设方案报价
  • 射阳建设网站对网站域名销户怎么做
  • 长白山开发建设集团网站wordpress排除分类