数据处理方法、装置、设备、存储介质及产品
文献发布时间:2023-06-19 19:28:50
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
目前,在业务的迭代过程中通常用观察者模式来处理多个模块之间的通信,其中,是由代理对象作为观察者之间数据传递的中间者,当业务的数据传递流程较长时,对于代理对象的生命周期的维护的困难度则会大大增加,并且业务的数据传递过程中也可能会出现数据传递失败或错误的现象。
可见,如何提升数据传递的可维护性和准确性是亟待解决的问题。
发明内容
为解决上述技术问题,本申请的实施例提供了数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,进而至少在一定程度上可以提升数据传递的可维护性和准确性。
根据本申请实施例的一个方面,提供了一种数据处理方法,所述方法包括:创建单例对象,所述单例对象的数据结构中包含有观察者的信息;响应于所述单例对象的数据结构中包含的第一观察者监测到观察对象的属性发生变化,获取变化后的属性数据,并生成自定义头部数据;其中,所述自定义头部数据中包含有作为数据接收方的第二观察者的标识;对所述属性数据、所述自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据;基于所述第二观察者的标识从所述单例对象的数据结构中确定所述第二观察者的地址,并根据所述第二观察者的地址向所述第二观察者发送所述第一特征数据,以使所述第二观察者根据接收到的所述第一特征数据中的协议规范信息获取所述第一特征数据中的属性数据。
根据本申请实施例的一个方面,提供了一种数据处理装置,所述装置包括:创建模块,配置为创建单例对象,所述单例对象的数据结构中包含有观察者的信息;监测与获取模块,配置为响应于所述单例对象的数据结构中包含的第一观察者监测到观察对象的属性发生变化,获取变化后的属性数据,并生成自定义头部数据;其中,所述自定义头部数据中包含有作为数据接收方的第二观察者的标识;封装模块,配置为对所述属性数据、所述自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据;发送模块,配置为基于所述第二观察者的标识从所述单例对象的数据结构中确定所述第二观察者的地址,并根据所述第二观察者的地址向所述第二观察者发送所述第一特征数据,以使所述第二观察者根据接收到的所述第一特征数据中的协议规范信息获取所述属性数据。
在本申请的一些实施例中,基于前述方案,所述封装模块包括:加密单元,配置为对获取到的所述属性数据进行加密,得到加密后的属性数据;封装单元,配置为对所述加密后的属性数据、所述自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据。
在本申请的一些实施例中,基于前述方案,所述加密单元,具体配置为将获取到的所述属性数据转换为二进制数据,并对所述二进制数据进行位运算,得到位运算后的数据,将位运算后的数据作为所述加密后的属性数据。
在本申请的一些实施例中,基于前述方案,所述装置还包括:接收模块,配置为所述第二观察者接收所述第一特征数据,并对所述第一特征数据进行解析,得到所述协议规范信息;加载模块,配置为所述第二观察者根据解析出的所述协议规范信息从所述第一特征数据中加载出所述属性数据。
在本申请的一些实施例中,基于前述方案,所述装置还包括:复制模块,配置为若所述第二观察者需要对所述属性数据进行修改,则复制所述加载出的属性数据;修改与执行模块,配置为对所复制的属性数据进行修改,以及执行与所修改的属性数据对应的操作。
在本申请的一些实施例中,基于前述方案,所述装置还包括:修改模块,配置为所述第二观察者将解析得到的所述自定义头部数据中所包含的第二观察者的标识修改为第三观察者的标识,以生成修改后的自定义头部数据,以及对解析出的所述协议规范信息进行字段增加,以生成修改后的协议规范信息;生成模块,配置为对加载后的属性数据、所述修改后的自定义头部数据,以及所述修改后的协议规范信息进行封装,生成第二特征数据;所述发送模块,还配置为基于所述第三观察者的标识从所述单例对象的数据结构中确定所述第三观察者的地址,并根据所述第三观察者的地址向所述第三观察者发送所述第二特征数据,以使所述第三观察者根据接收到的所述第二特征数据中的协议规范信息获取所述第二特征数据中的属性数据。
在本申请的一些实施例中,基于前述方案,所述加载模块包括:解析单元,配置为所述第二观察者根据解析出的所述协议规范信息从所述第一特征数据中解析得到加密后的属性数据;解密单元,配置为对所述加密后的属性数据进行解密,得到解密后的属性数据,将解密后的属性数据作为加载出的属性数据。
在本申请的一些实施例中,基于前述方案,所述解密单元,具体配置为将所述加密后的属性数据转换为二进制数据,并对所述二进制数据进行逆位运算,得到逆位运算后的数据,将逆位运算后的数据作为所述解密后的属性数据;其中,所述逆位运算为所述位运算的相反运算。
在本申请的一些实施例中,基于前述方案,所述装置还包括:获取模块,配置为若监测到观察者首次访问,则获取首次访问的观察者的标识和地址;写入模块,配置为将所述首次访问的观察者的标识和地址写入至所述单例对象的数据结构中;其中,所述单例对象的数据结构中包含键值对关系的观察者的信息,所述键值对关系中的键元素用于表示观察者的标识,所述键值对关系中的值元素用于表示观察者的地址。
在本申请的一些实施例中,基于前述方案,所述装置还包括:所述接收模块,还配置为接收删除指令;其中,所述删除指令中携带有待删除的观察者的标识;删除模块,配置为根据所述待删除的观察者的标识,在所述单例对象的数据结构中包含的多个观察者的信息中,删除和所述待删除的观察者的标识所匹配的观察者的信息。
在本申请的一些实施例中,基于前述方案,所述创建模块,具体配置为根据业务类型从预设的类型与触发事件映射关系表中,确定单例对象创建的预设事件;其中,所述预设的类型与触发事件映射关系表中预置有多种业务类型,以及各种业务类型对应的触发事件;若监测到所述预设事件被触发,则创建所述单例对象。
在本申请的一些实施例中,基于前述方案,所述监测与获取模块包括:添加单元,配置为将所述协议规范信息添加到所述自定义头部数据,以生成包含有所述协议规范信息的自定义头部数据;生成单元,配置为对所述属性数据以及所述包含有所述协议规范信息的自定义头部数据进行封装,生成所述第一特征数据。
根据本申请实施例的一个方面,提供了一种电子设备,包括一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述电子设备执行时,使得所述电子设备实现如上所述的数据处理方法。
根据本申请实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的数据处理方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令被处理器执行时实现如上所述的数据处理方法。
在本申请的实施例提供的技术方案中,一方面,通过创建单例对象,单例对象的数据结构中包含有观察者的信息,由于单例对象单一的特性,针对一种业务只创建一次单例对象,即一种业务对应的单例对象的数量只有一个,借助该创建的单例对象来管理观察者,可以大大减少数据传递过程中需要维护的对象的数量,即此时数据传递过程中需要维护的对象只有一个单例对象和所涉及的观察者,相对于相关技术数据传递过程中需要维护的多个代理对象和所涉及的观察者而言,需要维护的多个代理对象变为一个单例对象,从而提升了数据传递的可维护性;同时,也避免了由于代理对象数量过多,某个或某些关系较为复杂的代理对象由于外部逻辑错误被提前释放,所导致的数据传递失败的现象,还避免了由于某个或某些关系较为复杂的代理对象由于外部逻辑错误而错误调用某些方法,所导致的数据传递错误的现象,在极大程度上提升了数据传递的准确性。另一方面,第一观察者在监测到观察对象的属性发生变化时,对变化后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,得到第一特征数据,从而将该第一特征数据发送给自定义头部数据中所包含的第二观察者的标识所对应的第二观察者,这样作为数据接收方的第二观察者就可以根据第一特征数据中含有的协议规范信息获取得到该第一特征数据中含有的属性数据,使得属性数据能够被准确传递,进一步提升了数据传递的准确性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是通过代理对象传递数据的示意图;
图2是可以应用本申请实施例的技术方案的示例性系统架构的示意图;
图3是本申请的一示例性实施例示出的数据处理方法的流程图;
图4是本申请的一示例性实施例示出的数据处理方法的流程图;
图5是本申请的一示例性实施例示出的数据处理方法的流程图;
图6是本申请的一示例性实施例示出的数据处理方法的流程图;
图7是本申请的一示例性实施例示出的数据处理方法的流程图;
图8是本申请的一示例性实施例示出的数据处理方法的流程图;
图9是本申请的一示例性实施例示出的单例对象的结构示意图;
图10是本申请的一示例性实施例示出的数据处理方法的流程图;
图11是本申请的一示例性实施例示出的数据处理装置的框图;
图12是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相同的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相同的装置和方法的例子。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
需要说明的是,在本申请中提及的“多个”是指两个或者两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
观察者模式KVO(Key Value Observing,键值对观察)是移动应用程序设计模式中常用的模式,指的是多个对象之间存在一对多的依赖关系,当一个对象的状态发生变化,所有依赖于它的对象都得到通知并被自动更新。KVO机制中存在着被观察者对象(即观察对象)和观察者对象(即观察者)的概念,其中,观察对象指的是事件的发起者,观察者是需要接收事件并做出响应的响应者(观察者做出的响应称之为执行KVO操作);例如在游戏应用场景中,当主角移动到怪物的有效范围内时,怪物会袭击主角,其中主角是作为观察对象,而怪物则是作为观察者,主角发生移动即表征观察对象的状态/属性发生了变化(也即主角触发了移动的事件),此时怪物能够接收到主角发生移动这一事件,并做出袭击主角的响应动作。观察对象与观察者之间的关系是,观察对象可以注册一个或多个观察者,例如前述示例中,观察对象“主角”可以注册有观察者“怪物”,还可以注册观察者“陷阱”(当主角移动到陷阱的有效范围内时,陷阱会困住主角)、观察者“宝物”(当主角移动到宝物的有效范围内时,宝物会为主角加血)等;每个观察者又可以观察观察对象的多个属性,例如观察者“怪物”、“陷阱”、“宝物”都是观察观察对象“主角”移动这一属性,同时还可以观察观察对象“主角”的其他属性。
相关技术中,在业务的迭代过程中通常用观察者模式KVO来处理多个模块之间的通信,并且是由代理对象作为观察者之间数据传递的中间者,例如前述示例中,观察者“怪物”接收到主角发生移动的状态/属性数据后需要将该数据传递给另外的观察者如“野兽”等,这时的数据传递则是由代理对象来进行传递。为了更好地理解相关技术中由代理对象进行观察者之间数据传递的过程,请参阅图1,某业务逻辑中存在代理对象A、B,多个观察者1、2、3、M、N,以及观察对象,代理对象与观察者之间的关系为代理对象持有观察者,观察者可以向代理对象执行KVO操作以及可以观察代理对象,代理对象与观察对象之间的关系为观察对象持有代理对象,代理对象可以观察观察对象;其中,观察者1、2、3如果想要向观察者M发送数据,则都需要经过代理对象A进行传递,相应地,观察者1、2、3如果想要向观察者N发送数据,也都需要经过代理对象A进行传递。可以理解的是,图1所示仅为经过一个代理对象作为观察者之间数据传递的中间者,实际情况是,很多业务逻辑并非只有这么简单,通常业务的数据传递流程都是较长的,会通过多个代理对象共同来实现数据的传递,因此,数据传递流程越长,所需的代理对象也就越多,此大大增加了数据传递过程中代理对象的生命周期维护的困难度。并且,可能会因为数据传递过程中代理对象数量较多,某个或某些关系较为复杂的代理对象由于外部逻辑错误被提前释放,造成数据传递失败,例如当KVO关系较复杂时,代理对象A由于外部逻辑错误被提前释放,从而导致数据传递失败。同时,可能会因为数据传递过程中代理对象数量较多,某个或某些关系较为复杂的代理对象由于外部逻辑错误而错误调用某些方法,造成数据传递错误,例如代理对象A错误调用了某些方法,导致本该传递给观察者M的数据却错误传递给了观察者Q;并且由于数据传递错误还可能导致应用程序崩溃,例如在播放视频的应用场景下,在播放观察对象产生播放记录后,由播控观察者将数据传递给播放记录观察者,此时如果播控观察者接收到其他观察者的播放请求就会将播放观察对象所产生的播放记录覆盖掉,这样就会导致传递给播放记录观察者的播放记录出错,应用程序可能会因为该播放记录传递错误而引发一系列逻辑错误造成崩溃。
基于此,本申请实施例提出了一种数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,提升了数据传递的可维护性以及数据传递的准确性,并且,数据传递的实现逻辑简单。
请参阅图2,图2是本申请的一种示例性系统架构的示意图;该系统架构中包括终端设备210和服务器220,终端设备210和服务器220之间通过有线或者无线网络进行通信。
在本申请的一个实施例中,终端设备210中安装有播放类应用程序,其中播放类应用程序中各个模块如播放模块(运用观察者模式时也称播放观察者)、广告模块(运用观察者模式时也称广告观察者)、下载器模块(运用观察者模式时也称下载器观察者)等之间会涉及到数据的传递;则终端设备210可以创建单例对象,在单例对象的数据结构中包含的第一观察者监测到被观察对象的属性发生变化时,获取变化后的属性数据,并生成自定义头部数据,进而对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据,并基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据,这样第二观察者可以根据接收到的第一特征数据中的协议规范信息获取第一特征数据中的属性数据,从而实现观察者之间数据的传递;其中第一观察者可以是播放观察者,第二观察者可以是广告观察者和/或下载器观察者。终端设备210与服务器220之间通过有线或者无线网络进行通信,实现播放类应用程序的正常使用,如终端设备210可以向服务器220请求播放资源等。
在本申请的一个实施例中,终端设备210中安装有购物类应用程序,其中购物类应用程序中各个模块如下单模块、支付模块、更新模块等之间会涉及到数据的传递;可以理解的是,终端设备210将各个模块获取到的数据发送至服务器220,其中服务器220中有与终端设备210中各个模块分别对应的处理模块,如下单处理模块(运用观察者模式时也称下单处理观察者)、支付处理模块(运用观察者模式时也称支付处理观察者)、更新处理模块(运用观察者模式时也称更新处理观察者);则服务器220可以创建单例对象,在单例对象的数据结构中包含的第一观察者监测到被观察对象的属性发生变化时,获取变化后的属性数据,并生成自定义头部数据,进而对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据,并基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据,这样第二观察者可以根据接收到的第一特征数据中的协议规范信息获取第一特征数据中的属性数据,从而实现观察者之间数据的传递;其中第一观察者可以是下单处理观察者,第二观察者可以是支付处理观察者和/或更新处理观察者。
其中,终端设备210可以是智能手机、平板、笔记本电脑、计算机、车载终端等电子设备;服务器220可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器,本处不对此进行限制。
基于图2所示应用场景,在采用了本申请实施例的技术方案之后,提升了数据传递的可维护性以及数据传递的准确性,并且数据传递的实现逻辑简单。
以下对本申请实施例的技术方案的各种实现细节进行详细阐述:
请参阅图3,图3是本申请的一个实施例示出的数据处理方法的流程图。
如图3所示,数据处理方法至少包括步骤S301至步骤S304,详细介绍如下:
步骤S301,创建单例对象,单例对象的数据结构中包含有观察者的信息。
本申请实施例中单例对象指的是通过单例模式进行创建的对象。其中,单例模式用于创建进程中类的唯一对象,也即,单例模式中会创建一个单一的对象,该对象所属的类提供了一种访问其唯一对象(即该对象)的方法,该对象所属的类可以是在初始时实例化该对象(不管其他类是否需要访问/调用该对象先实例化该对象,后续其他类需要访问/调用该对象时直接返回即可),也可以是在第一次有其他类要访问/调用时实例化该对象(在其他类需要访问/调用该对象时才实例化该对象,并将该实例化对象返回),这样其他类要访问/调用该对象时,其他类内部无需再实例化该对象;可以理解的是,一个进程中可以有多个不同的类,例如一个进程中存在类1、类2以及类3,其中类1、类2以及类3中的任意一个都可以采用单例模式。
本申请实施例中单例对象的数据结构指的是相互之间存在一种或者多种特定关系的数据元素的集合,即指带“结构”的数据元素的集合。其中,“结构”指的是数据元素之间存在的关系,分为逻辑结构和存储结构;逻辑结构用于表征数据元素之间的逻辑关系的数据结构,通常是指数据元素之间的前后间关系,与在计算机中的存储位置无关,逻辑结构可以包括集合(即数据结构中的元素之间除了“同属一个集合”的相互关系外,别无其他关系)、线性结构(即数据结构中的元素存在一对一的相互关系)、树形结构(数据结构中的元素存在一对多的相互关系)以及图形结构(数据结构中的元素存在多对多的相互关系)等;存储结构用于表征数据的逻辑结构在计算机存储空间中的存放形式,通常一种数据的逻辑结构根据需要可以表示成多种存储结构,存储结构可以包括顺序存储、链式存储、索引存储以及哈希存储等。
其中,程序设计中数据结构包括但不限于数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、堆(Heap)以及散列表(Hash)等。
可选实施例中,单例对象的数据结构可以指的是单例对象所对应的全局字典(Dictionary)。其中,全局字典是一种以键值对关系的形式存储数据的数据结构,通过键元素就能找到键元素对应的值元素,全局字典中的键元素,是值元素在全局字典中的索引;例如名字-电话号码,通过名字就能找到对应的电话号码,名字就是键元素(key),电话号码就是值元素(value)。对于JavaScript编程语言来说,全局字典类的基础是数组(Array)。
可以理解的是,单例对象也可以创建自己的对象,例如根据业务需要创建观察者,那么此时创建的观察者可以是注册在全局字典中,即单例对象通过全局字典来管理处于全局字典内的观察者。
本申请实施例中单例对象的数据结构中包含有一个或多个(两个及两个以上)观察者的信息;其中,每个观察者都有其对应的观察对象,不同观察者所对应的观察者不同,每个观察者可以观察其对应的观察对象的一个或多个属性。需要说明的是,本申请实施例中所创建的单例对象本身也是可以作为观察者的,因此,单例对象的数据结构中包含的第一观察者也可以是其自己。
本申请实施例中观察者的信息包括但不限于观察者的标识和观察者的地址。这样单例对象可以根据观察者的信息来管理观察者之间的数据传递,例如可以将作为观察者的标识添加在自定义头部数据中,以指示数据接收方,以及根据作为数据接收方的观察者的标识确定出该观察者的地址,以便于根据该观察者的地址向其发送特征数据,从而实现观察者之间的数据传递,而无需再借助多个代理对象来实现多个观察者之间的数据传递,大大降低了可维护对象的数量,在极大程度上提升数据传递的可维护性。
在本申请的一个实施例中,步骤S301中创建单例对象的过程,可以包括以下步骤:
根据业务类型从预设的类型与触发事件映射关系表中,确定单例对象创建的预设事件;其中,预设的类型与触发事件映射关系表中预置有多种业务类型,以及各种业务类型对应的触发事件;
若监测到预设事件被触发,则创建单例对象。
也即,可选实施例中,是根据业务类型从预设的类型与触发事件映射关系表中,确定单例对象创建的预设事件,进而对该预设事件进行监测;其中,如果监测到该预设事件被触发,则此时需要创建单例对象,如果未监测到该预设事件被触发,则继续进行监测,直至监测到预设事件被触发为止。这样根据业务类型的不同,单例对象的创建时机也不同,在一定程度上提升了单例对象创建的灵活性,更加符合应用场景需求。
举例说明,如果当前是针对播放业务类型,则需要对播放类应用程序启动事件进行监测,如果监测到播放类应用程序启动被触发,则此时需要创建单例对象;其中,播放业务类型对应的播放类应用程序启动事件可以是从预设的类型与触发事件映射关系表中查找得到。
可以理解的是,预设的类型与触发事件映射关系表中预置有多种业务类型,以及各种业务类型对应的触发事件,该预设的类型与触发事件映射关系表由相关开发工作人员根据应用场景需求进行灵活设置。其中,请参阅下表1所示,为一种示例的预设的类型与触发事件映射关系表。
表1
在本申请的一个实施例中,在步骤S301中创建单例对象的过程之后,还可以包括以下步骤:
若监测到观察者首次访问,则获取首次访问的观察者的标识和地址;
将首次访问的观察者的标识和地址写入至单例对象的数据结构中,其中,单例对象的数据结构中包含键值对关系的观察者的信息,键值对关系中的键元素用于表示观察者的标识,键值对关系中的值元素用于表示观察者的地址。
也即,可选实施例中,是在创建单例对象之后,对观察者的访问进行监测;其中,如果监测到观察者是首次访问,则此时需要获取首次访问的观察者的标识和地址,并将获取到的首次访问的观察者的标识和地址写入至单例对象的数据结构中,如果监测到观察者不是首次访问,则此时无需进行处理。
可选实施例中观察者的标识指的是用于唯一表征观察者身份的信息;其中,观察者的标识包括但不限于观察者的标识号、名称等。
可选实施例中观察者的地址指的是观察者所处的位置信息,其也是一个唯一的地址。
可以理解的是,观察者首次访问指的是观察者被创建,如果观察者不是首次访问,那么观察者已经被创建好,即观察者的标识和地址已经写入至单例对象的数据结构中。
可以理解的是,获取到的首次访问的观察者的标识和地址是以键值对关系的形式写入到单例对象的数据结构中;其中,键元素用于表示观察者的标识,值元素用于表示观察者的地址。这样将观察者的标识和地址以键值对关系写入到单例对象的数据结构中,便于后续根据观察者的标识快速查找到该观察者的地址,提升查找速率。
举例说明,可以通过调用hashmap的put方法,具体为,hashmap.put(observer.id,observer.address),其中,observer.id为观察者的标识,observer.address为观察者的地址,这样将观察者的标识和地址以键值对关系的形式写入/存入到单例对象的数据结构中。可以理解的是,观察者的标识和观察者的地址可以是任意数据类型,例如可以为byte(8位、有符号的以二进制补码表示的整数)、short(16位、有符号的以二进制补码表示的整数)、int(32位、有符号的以二进制补码表示的整数)、long(64位、有符号的以二进制补码表示的整数)、float(单精度、32位、符合IEEE 754标准的浮点数)、double(双精度、64位、符合IEEE754标准的浮点数)、boolean(一位信息,只有取值true和false)、char(单一的16位Unicode字符)。相应地,可以通过调用hashmap的get方法,具体为,hashmap.get(observer.id),则返回的就是与observer.id对应的observer.address,这样就可以得到与观察者的标识对应的地址。
在本申请的一个实施例中,在将首次访问的观察者的标识和地址写入至单例对象的数据结构中的过程之后,还可以包括以下步骤:
接收删除指令;其中,删除指令中携带有待删除的观察者的标识;
根据待删除的观察者的标识,在单例对象的数据结构中包含的多个观察者的信息中,删除和待删除的观察者的标识所匹配的观察者的信息。
也即,可选实施例中,根据应用场景的需要,相关开发工作人员等可以下发删除指令,那么在接收到删除指令后,就需要根据删除指令中所携带的待删除的观察者的标识,从单例对象的数据结构中所包含的多个观察者的信息中,删除和待删除的观察者的标识所匹配的观察者的信息。这样在某一个/某一些观察者没有逻辑任务或者调整了逻辑任务时,可以将其进行删除,实现了对单例对象中所管理的观察者的实时调整,提升了单例对象管理观察者的灵活性和便捷性。
步骤S302,响应于单例对象的数据结构中包含的第一观察者监测到观察对象的属性发生变化,获取变化后的属性数据,并生成自定义头部数据;其中,自定义头部数据中包含有作为数据接收方的第二观察者的标识。
本申请实施例中第一观察者是单例对象的数据结构中所包含的观察者,其从写入至单例对象的数据结构中之后就会对观察对象的属性进行监测;其中,如果第一观察者监测到观察对象的属性发生变化,则获取变化后的属性数据,并生成自定义头部数据,如果第一观察者未监测到观察对象的属性发生变化,则继续进行监测,直至监测到观察对象的属性发生变化为止。
本申请实施例中第一观察者生成的自定义头部数据中包含有作为数据接收方的第二观察者的标识;其中,自定义头部数据中所包含的作为数据接收方的第二观察者的标识可以有一个或多个(两个及两个以上),以指示数据接收方为哪一个/哪一些观察者。
其中,第二观察者可以是单例对象的数据结构中所包含的观察者;例如自定义头部数据中包含的作为数据接收方的第二观察者的标识为“TMFOffline”,同时单例对象的数据结构中也包含有观察者的标识“TMFOffline”。
其中,第二观察者可以不是单例对象的数据结构中所包含的观察者;例如自定义头部数据中包含的作为数据接收方的第二观察者的标识为“TMFOffline”,但是单例对象的数据结构中并未包含有观察者的标识“TMFOffline”。
其中,第二观察者可以部分是单例对象的数据结构中所包含的观察者,可以部分不是单例对象的数据结构中所包含的观察者;例如自定义头部数据中包含的作为数据接收方的第二观察者的标识为“TMFOffline”和“TMFLive”,其中,单例对象的数据结构中包含有观察者的标识“TMFOffline”,而未包含观察者的标识“TMFLive”。
步骤S303,对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据。
本申请实施例中第一观察者监测到观察对象的属性发生变化,获取变化后的属性数据,并生成自定义头部数据之后,便可以对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据,即生成待传递的数据。
在本申请的一个实施例中,步骤S303中对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据的过程,可以包括以下步骤:
对获取到的属性数据进行加密,得到加密后的属性数据;
对加密后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据。
也即,可选实施例中,是先对获取到的属性数据先进行加密处理,得到加密处理后的属性数据,然后对加密处理后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,从而生成第一特征数据。这样对获取到的属性数据进行加密处理,并根据加密处理后的属性数据进行封装,提升了属性数据的安全性,避免了被攻击所导致属性数据泄露等现象。
在本申请的一个实施例中,对获取到的属性数据进行加密,得到加密后的属性数据的过程,可以包括以下步骤:
将获取到的属性数据转换为二进制数据,并对二进制数据进行位运算,得到位运算后的数据,将位运算后的数据作为加密后的属性数据。
也即,可选实施例中,是通过将获取到的属性数据先转换为二进制数据,然后对转换后的二进制数据进行位运算,得到位运算后的数据,此时得到的位运算数据即为加密后的属性数据,从而实现了对获取到的属性数据的加密。这样对属性数据加密的逻辑简单、易于实现。
可选实施例中位运算包括但不限于and运算&(逻辑与运算)、or运算|(逻辑或运算)、xor运算^(异或运算)、not运算~(逻辑非运算)、shl运算<<以及shr运算>>等,在实际应用中,可以根据应用场景进行灵活选择,本发明对此不做具体限定。
在本申请的一个实施例中,步骤S303中对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据的过程,可以包括以下步骤:
将协议规范信息添加到自定义头部数据,以生成包含有协议规范信息的自定义头部数据;
对属性数据以及包含有协议规范信息的自定义头部数据进行封装,生成第一特征数据。
也即,可选实施例中,是先将协议规范信息添加到自定义头部数据中,生成包含有协议规范信息的自定义头部数据,即自定义头部数据中除了包含有作为数据接收方的第二观察者的标识之外,还包含有协议规范信息,然后将属性数据以及包含有协议规范信息的自定义头部数据(同时还包含第二观察者的标识)进行封装,从而生成第一特征数据。这样将协议规范信息和第二观察者的标识都添加到自定义头部数据中,而无需再单独用其他字段表征协议规范信息,提升了可维护性,并且减少字段数量,提升了数据的传输速率。
步骤S304,基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据,以使第二观察者根据接收到的第一特征数据中的协议规范信息获取第一特征数据中的属性数据。
本申请实施例中对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据之后,需要基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据,这样第二观察者可以根据接收到的第一特征数据中的协议规范信息获取第一特征数据中的属性数据。
在本申请一些实施例中,请参阅图4,步骤S304中在根据第二观察者的地址向第二观察者发送第一特征数据的过程之后,还可以包括以下步骤:
步骤S401,第二观察者接收第一特征数据,并对第一特征数据进行解析,得到协议规范信息;
步骤S402,第二观察者根据解析出的协议规范信息从第一特征数据中加载出属性数据。
也即,可选实施例中,第二观察者接收到第一特征数据后,需要先对第一特征数据进行解析,得到协议规范信息,然后根据解析出的协议规范信息从第一特征数据中加载出属性数据。也就是说,协议规范信息是从第一特征数据中获取/加载属性数据的媒介,只有先从第一特征数据中解析得到协议规范信息之后,才能借助所解析得到的协议规范信息获取/加载出第一特征数据中的属性数据。
在本申请一些实施例中,步骤S402中第二观察者根据解析出的协议规范信息从第一特征数据中加载出属性数据的过程,可以包括以下步骤:
第二观察者根据解析出的协议规范信息从第一特征数据中解析得到加密后的属性数据;
对加密后的属性数据进行解密,得到解密后的属性数据,将解密后的属性数据作为加载出的属性数据。
也即,可选实施例中,作为数据发送方的第一观察者在对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据时,出于安全性考虑,对属性数据进行了加密,那么作为数据接收方的第二观察者在接收到第一特征数据时,则需要先根据解析出的协议规范信息从第一特征数据中解析得到加密后的属性数据,然后对加密后的属性数据进行解密,得到解密后的属性数据,此时得到的解密后的属性数据即为加载出的属性数据。这样作为数据接收方的第二观察者才能成功获取到第一特征数据中的属性数据。
在本申请的一个实施例中,对加密后的属性数据进行解密,得到解密后的属性数据,可以包括以下步骤:
将加密后的属性数据转换为二进制数据,并对二进制数据进行逆位运算,得到逆位运算后的数据,将逆位运算后的数据作为解密后的属性数据;其中,逆位运算为位运算的相反运算。
也即,可选实施例中,作为数据发送方的第一观察者是对属性数据通过位运算的方式进行的加密,那么作为数据接收方的第二观察者在对属性数据进行解密时,则需要先将加密后的属性数据转换为二进制数据,并对二进制数据进行逆位运算,得到逆位运算后的数据,将逆位运算后的数据作为解密后的属性数据;可以理解的是,逆位运算为位运算的相反运算。
在本申请的一个实施例中,请参阅图5,在步骤S402中第二观察者根据解析出的协议规范信息从第一特征数据中加载出属性数据的过程之后,还可以包括以下步骤:
步骤S501,若第二观察者需要对属性数据进行修改,则复制加载出的属性数据;
步骤S502,对所复制的属性数据进行修改,以及执行与所修改的属性数据对应的操作。
也即,可选实施例中,第二观察者根据解析出的协议规范信息从第一特征数据中加载出属性数据之后,确定此时需要对属性数据进行修改时,那么可以复制出该所加载出的属性数据,进而对所复制出的属性数据进行修改,以及执行与所修改的属性数据对应的操作,或者,可以执行与所复制的属性数据对应的操作。这样第二观察者所修改的属性数据是其所复制出来的属性数据,而并不会对第一特征数据中的属性数据进行修改,能够避免第一特征数据传递给其他作为数据接收方的第二观察者出错的现象,即其他作为数据接收方的第二观察者接收到的仍旧是第一特征数据中的属性数据(原始的,未发生任何改变)。
在本申请的一个实施例中,请参阅图6,第二观察者对第一特征数据进行解析还得到自定义头部数据;在步骤S402中第二观察者根据解析出的协议规范信息从第一特征数据中加载出属性数据的过程之后,还可以包括以下步骤:
步骤S601,第二观察者将解析得到的自定义头部数据中所包含的第二观察者的标识修改为第三观察者的标识,以生成修改后的自定义头部数据,以及对解析出的协议规范信息进行字段增加,以生成修改后的协议规范信息;
步骤S602,对加载后的属性数据、修改后的自定义头部数据,以及修改后的协议规范信息进行封装,生成第二特征数据;
步骤S603,基于第三观察者的标识从单例对象的数据结构中确定第三观察者的地址,并根据第三观察者的地址向第三观察者发送第二特征数据,以使第三观察者根据接收到的第二特征数据中的协议规范信息获取第二特征数据中的属性数据。
也即,可选实施例中,第二观察者对第一特征数据进行解析,得到的是自定义头部数据和协议规范信息,然后第二观察者可以同时对解析得到的自定义头部数据和协议规范信息进行修改,得到修改后的自定义头部数据和修改后的协议规范信息,进而再将加载后的属性数据、修改后的自定义头部数据以及修改后的协议规范信息进行封装,生成第二特征数据。
可选实施例中第二观察者对解析得到的自定义头部数据进行修改,具体可以是对自定义头部数据中所包含的第二观察者的标识进行修改,例如修改为第三观察者的标识,或者,增加第三观察者的标识;其中,所增加的第三观察者的标识所对应的第三观察者即为下一个数据接收方,相应地,此时第二观察者则作为了数据发送方,第三观察者用于接收第二观察者发送的第二特征数据。
可选实施例中第二观察者对解析得到的协议规范信息进行修改,具体可以是在协议规范信息中增加字段;其中,所增加的字段是用于表示第二观察者接收过此第一特征数据中的属性数据,即让下一个作为数据接收方的第三观察者在接收到第二观察者发送的第二特征数据时,从第二特征数据中解析出协议规范信息(即第二观察者修改后的协议规范信息),从而可以根据该协议规范信息确定此第二特征数据中的属性数据(也为第一特征数据中的属性数据,因为第一特征数据和第二特征数据只有协议规范信息和作为数据接收方的观察者的标识发生变化,属性数据并未发生变化)有哪些观察者接收过,并且应该按照该协议规范信息从第二特征数据中加载出属性数据。
在本申请的一个实施例中,如果第二观察者不是单例对象的数据结构中所包含的观察者,那么第一观察者则需要基于第二观察者的标识从其他对象的数据结构中确定第二观察者的地址,进而根据第二观察者的地址向第二观察者发送第一特征数据,以使第二观察者根据接收到的第一特征数据中的协议规范信息获取第一特征数据中的属性数据。
在本申请的一个实施例中,如果第二观察者不是单例对象的数据结构中所包含的观察者,那么第一观察者可以判定该第二观察者的标识属于无效标识,即其为无效的数据接收方,此时则无需发送第一特征数据,进一步还可以确认第二观察者的标识是否有误等。
本申请实施例中借助单例对象来管理观察者,可以大大减少数据传递中需要维护的对象,同时也可以避免了相关技术中由于对象数量过多所导致的数据传递出错的现象,提升了数据传递的准确性;并且,观察者在监测到观察对象的属性发生变化时,其所传递的特性数据中包含了观察者之间进行数据传递的协议规范信息,这样作为数据接收方的观察者可以根据该协议规范信息获取得到特征数据中含有的属性数据,使得属性数据能够被准确传递,在极大程度上提升了数据传递的准确性。
以下对本申请实施例的一个具体应用场景进行详细说明:
请参阅图7,为一种示例性的数据处理方法的流程图;数据处理方法可以包括以下步骤,详细介绍如下:
步骤S701,创建单例对象,单例对象的数据结构中包含有观察者的信息。
其中,可以是根据业务类型从预设的类型与触发事件映射关系表中,确定单例对象创建的预设事件,如果监测到预设事件被触发,则创建单例对象。可选地,步骤S701的具体实施过程可以参照前述实施例的技术方案。
步骤S702,若单例对象的数据结构中包含的第一观察者监测到观察对象的属性发生变化,则获取变化后的属性数据,并生成自定义头部数据。
其中,可以是将协议规范信息和作为数据接收方的第二观察者的标识都添加到自定义头部数据,以生成同时包含有协议规范信息和第二观察者的标识的自定义头部数据。可选地,步骤S702的具体实施过程可以参照前述实施例的技术方案。
步骤S703,第一观察者对获取到的变化后的属性数据进行加密,得到加密后的属性数据。
其中,第一观察者对获取到的变化后的属性数据进行加密,得到加密后的属性数据,可以是将获取到的属性数据转换为二进制数据,然后对二进制数据进行位运算,得到位运算后的数据,此时位运算后的数据即为加密后的属性数据。可选地,步骤S703的具体实施过程可以参照前述实施例的技术方案。
步骤S704,第一观察者对加密后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据。
其中,第一观察者对加密后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据,可以是将属性数据以及同时包含有协议规范信息和第二观察者的标识的自定义头部数据进行封装,生成第一特征数据。可选地,步骤S704的具体实施过程可以参照前述实施例的技术方案。
步骤S705,第一观察者基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据。
其中,单例对象的数据结构中可以是包含有键值对关系的观察者的信息,其中键值对关系中的键元素用于表示观察者的标识,键值对关系中的值元素用于表示观察者的地址;因此,第一观察者可以基于第二观察者的标识从单例对象的数据结构中确定出第二观察者的地址,进而可以根据确定出的第二观察者的地址向第二观察者发送第一特征数据。可选地,步骤S705的具体实施过程可以参照前述实施例的技术方案。
步骤S706,第二观察者接收第一特征数据,并对第一特征数据进行解析,得到自定义头部数据和协议规范信息。
其中,第一观察者向第二观察者发送第一特征数据,相应地,第二观察者接收第一特征数据,进而对接收到的第一特征数据进行解析,得到自定义头部数据和协议规范信息。可以理解的是,由于第一特征数据中的属性数据需要借助于第一特征数据中的协议规范信息进行加载,因此,这里只解析得到自定义头部数据和协议规范信息。可选地,步骤S706的具体实施过程可以参照前述实施例的技术方案。
步骤S707,第二观察者根据解析出的协议规范信息从第一特征数据中解析得到加密后的属性数据。
其中,第二观察者从第一特征数据中解析得到协议规范信息之后,就可以根据解析得到的协议规范信息进一步从第一特征数据中解析得到加密后的属性数据。可以理解的是,如果第一观察者在封装第一特征数据时,没有对属性数据进行加密,那么第二观察者根据解析得到的协议规范信息进一步从第一特征数据中解析得到属性数据也是没有加密的。可选地,步骤S707的具体实施过程可以参照前述实施例的技术方案。
步骤S708,第二观察者对加密后的属性数据进行解密,得到解密后的属性数据,将解密后的属性数据作为加载出的属性数据。
其中,第二观察者对加密后的属性数据进行解密,得到解密后的属性数据,可以是将加密后的属性数据转换为二进制数据,并对二进制数据进行逆位运算,得到逆位运算后的数据,此时逆位运算后的数据即为解密后的属性数据;逆位运算为位运算的相反运算。
其中,如果第二观察者需要对加载出的属性数据进行修改,则复制加载出的属性数据,然后对所复制的属性数据进行修改,以及执行与所修改的属性数据对应的操作。可选地,步骤S708的具体实施过程可以参照前述实施例的技术方案。
步骤S709,第二观察者将解析得到的自定义头部数据中所包含的第二观察者的标识修改为第三观察者的标识,以生成修改后的自定义头部数据,以及对解析出的协议规范信息进行字段增加,以生成修改后的协议规范信息。
其中,第二观察者所增加的第三观察者的标识所对应的第三观察者即为下一个数据接收方,相应地,此时第二观察者是作为数据发送方,第三观察者用于接收第二观察者发送的第二特征数据。
其中,第二观察者所增加的字段是用于表示第二观察者接收过此第一特征数据中的属性数据,即让下一个作为数据接收方的第三观察者在接收到第二观察者发送的第二特征数据时,从第二特征数据中解析出协议规范信息,从而可以根据该协议规范信息确定此第二特征数据中的属性数据有哪些观察者接收过,并且应该按照该协议规范信息从第二特征数据中加载出属性数据。可选地,步骤S709的具体实施过程可以参照前述实施例的技术方案。
步骤S710,第二观察者对加载后的属性数据、修改后的自定义头部数据,以及修改后的协议规范信息进行封装,生成第二特征数据。
其中,第二观察者对加载后的属性数据、修改后的自定义头部数据,以及修改后的协议规范信息进行封装,生成第二特征数据,可以是将属性数据以及同时包含有修改后的协议规范信息和第三观察者的标识的自定义头部数据进行封装,生成第一特征数据。可选地,步骤S710的具体实施过程可以参照前述实施例的技术方案。
步骤S711,第二观察者基于第三观察者的标识从单例对象的数据结构中确定第三观察者的地址,并根据第三观察者的地址向第三观察者发送第二特征数据。
本申请实施例中通过单例对象实现了观察者之间数据的传递,不仅减少了数据传递中需要维护的对象(例如相关技术中的代理对象),提升了数据传递的可维护性,而且还对获取到的变化后的属性数据进行了加密,保证了属性数据的安全性,同时每个观察者接收到所传递的特征数据时,都会在特征数据中的协议规范信息进行字段增加,从而以表示接收过此特征数据。
以下对本申请实施例的另一个具体应用场景进行详细说明,在该应用场景中,以观察对象为视频,单例对象的全局字典中包含的观察者为播放观察者、离线观察者、直播观察者以及广告观察者的信息为示例进行说明:
请参阅图8,为一种示例性的数据处理方法的流程图;数据处理方法可以包括以下步骤,详细介绍如下:
步骤S801,若监测到播放类应用程序启动事件触发,则创建单例对象。
其中,可以是通过GCD(Grand Central Dispatch,多核编程)中建立一次方法(dispatch_once)来创建单例对象SO。
其中,请参阅图9,为一种示例性的单例对象的示意图;单例对象中有全局字典模块901、监听模块902、加密模块903以及数据解析模块904,其中:
全局字典模块901中包含有观察者的信息;每个观察者的信息以键值对关系进行存储,每个观察者在首次访问时是将观察者的标识和地址注册/写入至单例对象的全局字典模块901中,因此后续可以通过观察者的标识k获取到对应的观察者的地址。可选地,全局字典模块901中包含的观察者的信息,可以通过新增观察者方法(addObserver)实现观察者的注册/写入,可以通过移除观察者方法(removeObserver)实现观察者的删除。监听模块902用于监听播放类应用程序启动事件是否被触发。加密模块903用于对获取到的属性数据进行加密(具体请参见下述步骤S803中的介绍)。数据解析模块904用于对第一特征数据进行解析,以得到第一特征数据中的属性数据、自定义头部数据以及协议规范信息(具体请参见下述步骤S806至步骤S807中的介绍)。
步骤S802,若单例对象的全局字典中包含的第一观察者监测到观察对象的属性发生变化,则获取变化后的属性数据,并生成自定义头部数据;其中,自定义头部数据中包含有作为数据接收方的第二观察者的标识。
其中,第一观察者可以是单例对象的全局字典中包含的播放观察者,如果第一观察者监测到观察对象的属性发生变化,则可以通过观察属性当前值变化获取方法(observeValueForKeyPath)获取变化后的属性数据。
其中,可以是将协议规范信息和作为数据接收方的第二观察者的标识都添加到自定义头部数据,以生成同时包含有协议规范信息和第二观察者的标识的自定义头部数据。
步骤S803,第一观察者将获取到的变化后的属性数据转换为二进制数据,并对二进制数据进行异或运算,得到异或运算后的数据,将异或运算后的数据作为加密后的属性数据。
其中,也可以是对二进制数据进行逻辑与运算或者逻辑或运算或者逻辑非运算等位运算,这样对属性数据进行加密的逻辑简单且易于实现。
步骤S804,第一观察者对加密后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据。
其中,生成的示例性第一特征数据可以是:
/>
由此,从上述示例性的第一特征数据中可以看出自定义头部数据中同时包含了协议规范信息以及作为数据接收方的第二观察者的标识,其中作为数据接收方的第二观察者的标识为离线观察者和直播观察者。
步骤S805,第一观察者基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据。
可选地,步骤S805的具体实施过程可以参照前述实施例的技术方案。
步骤S806,第二观察者接收第一特征数据,并对第一特征数据进行解析,得到自定义头部数据和协议规范信息。
可选地,步骤S806的具体实施过程可以参照前述实施例的技术方案。
步骤S807,第二观察者根据解析出的协议规范信息从第一特征数据中加载出加密后的属性数据。
可选地,步骤S807的具体实施过程可以参照前述实施例的技术方案。
步骤S808,第二观察者将加密后的属性数据转换为二进制数据,并对二进制数据进行逆异或运算,得到逆异或运算后的数据,将逆异或运算后的数据作为解密后的属性数据。
可选地,步骤S808的具体实施过程可以参照前述实施例的技术方案。
步骤S809,第二观察者复制解密后的属性数据,并执行与解密后的属性数据对应的操作。
其中,第二观察者中的离线观察者可以对解密后的属性数据进行复制,并根据该复制出的属性数据执行离线下载操作;第二观察者中的直播观察者可以根据获取到该解密后的属性数据直接执行直播操作,即直播观察者只需要获取到该解密后的属性数据即可,不需要再复制解密后的属性数据。
步骤S810,第二观察者将解析得到的自定义头部数据中所包含的第二观察者的标识修改为第三观察者的标识,以生成修改后的自定义头部数据,以及对解析出的协议规范信息进行字段增加,以生成修改后的协议规范信息。
其中,协议规范信息为观察者之间进行数据传递的所声明的协议,因为作为数据发送方的观察者将数据传递到作为数据接收方的观察者的过程中可以会经历多个观察者,因此,作为数据接收方的观察者需要对协议规范信息进行字段增加,以表明接收过第一特征数据中的属性数据(且此属性数据依赖于第一特征数据中的协议规范信息进行加载)。
其中,第二观察者中的离线观察者根据需要将自定义头部数据中所包含的观察者的标识进行修改,例如修改为“TMFAdver”,即“receiver_class”:“TMFAdver”,或者“receiver_class”:“TMFOffline\TMFLive\TMFAdver”;并且需要同时对解析出的协议规范信息进行字段增加,例如增加“text/plain”,即“datas_type”:“application/json,text/html,text/plain”。
步骤S811,第二观察者对加载后的属性数据、修改后的自定义头部数据,以及修改后的协议规范信息进行封装,生成第二特征数据。
其中,第二观察者中的离线观察者对加载后的属性数据(即“customDatas”……)、修改后的自定义头部数据(即“receiver_class”:“TMFOffline\TMFLive\TMFAdver”),以及修改后的协议规范信息(即“datas_type”:“application/json,text/html,text/plain”)进行封装,生成第二特征数据。
步骤S812,第二观察者基于第三观察者的标识从单例对象的数据结构中确定第三观察者的地址,并根据第三观察者的地址向第三观察者发送第二特征数据。
其中,第三观察者(即广告观察者TMFAdver)在接收到第二观察者中的离线观察者发送的第二特征数据之后,需要对第二特征数据进行解析,得到第二特征数据中的自定义头部数据和协议规范信息,然后第三观察者根据解析出的协议规范信息从第二特征数据中加载出属性数据,进而可以执行与属性数据对应的播放广告操作,或者再次生成第三特征数据,其中生成第三特征数据可以参照前述实施例中生成第二特征数据的过程。
请参阅图10,为一种示例性的数据处理方法的流程图;数据处理方法可以包括以下步骤,详细介绍如下:
步骤S1001,单例对象的数据结构中包含的第一观察者对观察对象的属性进行监测。
步骤S1002,单例对象的数据结构中包含的第一观察者监测到观察对象的属性发生变化时,调用观察属性当前值变化获取方法(observeValueForKeyPath)获取变化后的属性数据。
步骤S1003,从单例对象的数据结构中取出作为数据接收方的第二观察者的标识。
步骤S1004,根据该第二观察者的标识生成自定义头部数据,以及对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,构造得到第一特征数据,并发送给第二观察者。
步骤S1005,第二观察者接收第一特征数据,并判断是否需要对属性数据进行修改;若是,则执行步骤S1006,若否,则执行步骤S1007。
步骤S1006,复制第一特征数据中的属性数据,并对复制出的属性数据进行修改,同时生成第二特征数据。
步骤S1007,递归取出单例对象的数据结构中包含的观察者进行第二特征数据的传递。
步骤S1008,判断下一个观察者是否为第二特征数据中自定义头部数据中指定的数据接收方;若是,则执行步骤S1009,若否,则返回执行步骤S1007。
步骤S1009:对第二特征数据进行解析,输出第二特征数据中的属性数据。
可选地,步骤S1001至步骤S1009的具体实施过程可以参照前述实施例的技术方案。
图11是本申请的一个实施例示出的数据处理装置的框图。如图11所示,该装置包括:
创建模块1101,配置为创建单例对象,单例对象的数据结构中包含有观察者的信息;
监测与获取模块1102,配置为响应于单例对象的数据结构中包含的第一观察者监测到观察对象的属性发生变化,获取变化后的属性数据,并生成自定义头部数据;其中,自定义头部数据中包含有作为数据接收方的第二观察者的标识;
封装模块1103,配置为对属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据;
发送模块1104,配置为基于第二观察者的标识从单例对象的数据结构中确定第二观察者的地址,并根据第二观察者的地址向第二观察者发送第一特征数据,以使第二观察者根据接收到的第一特征数据中的协议规范信息获取属性数据。
本申请实施例中借助单例对象来管理观察者,可以大大减少数据传递中需要维护的对象,同时也可以避免了相关技术中由于对象过多所导致的数据传递出错的现象,提升了数据传递的准确性;并且,观察者在监测到观察对象的属性发生变化时,其所传递的特性数据中包含了观察者之间进行数据传递的协议规范信息,这样作为数据接收方的观察者可以根据该协议规范信息获取得到特征数据中含有的属性数据,使得属性数据能够被准确传递,在极大程度上提升了数据传递的准确性。
在本申请的一个实施例中,封装模块1103包括:
加密单元,配置为对获取到的属性数据进行加密,得到加密后的属性数据;
封装单元,配置为对加密后的属性数据、自定义头部数据,以及用于在观察者之间进行数据传递的协议规范信息进行封装,生成第一特征数据。
在本申请的一个实施例中,加密单元,具体配置为将获取到的属性数据转换为二进制数据,并对二进制数据进行位运算,得到位运算后的数据,将位运算后的数据作为加密后的属性数据。
在本申请的一个实施例中,装置还包括:
接收模块,配置为第二观察者接收第一特征数据,并对第一特征数据进行解析,得到协议规范信息;
加载模块,配置为第二观察者根据解析出的协议规范信息从第一特征数据中加载出属性数据。
在本申请的一个实施例中,装置还包括:
复制模块,配置为若第二观察者需要对属性数据进行修改,则复制加载出的属性数据;
修改与执行模块,配置为对所复制的属性数据进行修改,以及执行与所修改的属性数据对应的操作。
在本申请的一个实施例中,装置还包括:
修改模块,配置为第二观察者将解析得到的自定义头部数据中所包含的第二观察者的标识修改为第三观察者的标识,以生成修改后的自定义头部数据,以及对解析出的协议规范信息进行字段增加,以生成修改后的协议规范信息;
生成模块,配置为对加载后的属性数据、修改后的自定义头部数据,以及修改后的协议规范信息进行封装,生成第二特征数据;
发送模块1104,还配置为基于第三观察者的标识从单例对象的数据结构中确定第三观察者的地址,并根据第三观察者的地址向第三观察者发送第二特征数据,以使第三观察者根据接收到的第二特征数据中的协议规范信息获取第二特征数据中的属性数据。
在本申请的一个实施例中,加载模块包括:
解析单元,配置为第二观察者根据解析出的协议规范信息从第一特征数据中解析得到加密后的属性数据;
解密单元,配置为对加密后的属性数据进行解密,得到解密后的属性数据,将解密后的属性数据作为加载出的属性数据。
在本申请的一个实施例中,解密单元,具体配置为将加密后的属性数据转换为二进制数据,并对二进制数据进行逆位运算,得到逆位运算后的数据,将逆位运算后的数据作为解密后的属性数据;其中,逆位运算为位运算的相反运算。
在本申请的一个实施例中,装置还包括:
获取模块,配置为若监测到观察者首次访问,则获取首次访问的观察者的标识和地址;
写入模块,配置为将首次访问的观察者的标识和地址写入至单例对象的数据结构中;其中,单例对象的数据结构中包含键值对关系的观察者的信息,键值对关系中的键元素用于表示观察者的标识,键值对关系中的值元素用于表示观察者的地址。
在本申请的一个实施例中,装置还包括:
接收模块,还配置为接收删除指令;其中,删除指令中携带有待删除的观察者的标识;
删除模块,配置为根据待删除的观察者的标识,在单例对象的数据结构中包含的多个观察者的信息中,删除和待删除的观察者的标识所匹配的观察者的信息。
在本申请的一个实施例中,创建模块1101,具体配置为根据业务类型从预设的类型与触发事件映射关系表中,确定单例对象创建的预设事件;其中,预设的类型与触发事件映射关系表中预置有多种业务类型,以及各种业务类型对应的触发事件;若监测到预设事件被触发,则创建单例对象。
在本申请的一个实施例中,监测与获取模块1102包括:
添加单元,配置为将协议规范信息添加到自定义头部数据,以生成包含有协议规范信息的自定义头部数据;
生成单元,配置为对属性数据以及包含有协议规范信息的自定义头部数据进行封装,生成第一特征数据。
需要说明的是,上述实施例所提供的装置与上述实施例所提供的方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
本申请的实施例还提供了一种电子设备,包括一个或多个处理器和存储装置,其中,存储装置用于存储一个或多个程序,当一个或多个程序被电子设备执行时实现如前的数据处理方法。
图12示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图12示出的电子设备的计算机系统1200仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图12所示,计算机系统1200包括中央处理单元(Central Processing Unit,CPU)1201,其可以根据存储在只读存储器(Read-Only Memory,ROM)1202中的程序或者从储存部分1208加载到随机访问存储器(Random Access Memory,RAM)1203中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在RAM 1203中,还存储有系统操作所需的各种程序和数据。CPU 1201、ROM 1202以及RAM 1203通过总线1204彼此相连。输入/输出(Input/Output,I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1207;包括硬盘等的储存部分1208;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入储存部分1208。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不相同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
本申请的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前的数据处理方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
本申请的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例中提供的数据处理方法。
上述内容,仅为本申请的较佳示例性实施例,并非用于限制本申请的实施方案,本领域普通技术人员根据本申请的主要构思和精神,可以十分方便地进行相应的变通或修改,故本申请的保护范围应以权利要求书所要求的保护范围为准。
- IP产品运营数据处理方法、装置、设备及可读存储介质
- 数据仓库内数据处理方法、装置、计算机设备和存储介质
- 一种数据处理方法、数据处理装置、计算机设备及可读存储介质
- 图像处理方法和装置、电子设备、存储介质、程序产品
- 图像处理方法和装置、电子设备、存储介质、程序产品
- 点云数据处理方法、装置、设备、存储介质和程序产品
- 数据处理方法、装置、设备、存储介质及程序产品