基于字符串替换的弹幕校验方法、装置、终端及存储介质与流程

文档序号:17009962发布日期:2019-03-02 02:12阅读:170来源:国知局
基于字符串替换的弹幕校验方法、装置、终端及存储介质与流程

本发明实施例涉及弹幕技术领域,尤其涉及一种基于字符串替换的弹幕校验方法、装置、终端及存储介质。



背景技术:

随着智能终端的快速发展,各种应用软件被开发应用于智能终端中。一些应用软件比如直播软件、视频播放软件中往往具有弹幕接收、解析和推送等弹幕功能。在开发这些应用软件的过程中,需要对服务器下发的弹幕数据进行相关测试,以确定弹幕功能是否正常运行。

目前,基于android操作系统的应用软件开发中,服务器在根据预设弹幕协议构建完成弹幕数据之后,往往直接将构建的弹幕数据下发至客户端,并且客户端在接收到弹幕数据时,也是直接对弹幕数据进行解析和分发处理。

可见,在现有的弹幕数据下发过程以及接收过程中,服务器和客户端均未对弹幕数据进行任何校验,从而当弹幕数据存在异常情况时,便会导致弹幕测试流程出现错误,甚至导致客户端出现系统崩溃等问题,严重影响了弹幕测试效率。



技术实现要素:

本发明实施例提供了一种基于字符串替换的弹幕校验方法、装置、终端及存储介质,以对弹幕数据进行完整性校验,从而保证弹幕数据可以被正常解析,避免导致客户端出现系统崩溃等问题。

第一方面,本发明实施例提供了一种基于字符串替换的弹幕校验方法,包括:

获取预设字符串嵌套结构的目标弹幕数据,并将所述目标弹幕数据作为当前目标弹幕数据,将所述预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数;

根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,并调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验;

若当前嵌套数据校验成功,且当前嵌套层数为至少两层,则调用存储当前目标弹幕数据的当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数;

返回执行所述根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据的操作;

若当前嵌套数据校验成功,且当前嵌套层数为一层,则确定所述目标弹幕数据校验成功。

第二方面,本发明实施例还提供了一种基于字符串替换的弹幕校验装置,包括:

目标弹幕数据获取模块,用于获取预设字符串嵌套结构的目标弹幕数据,并将所述目标弹幕数据作为当前目标弹幕数据,将所述预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数;

当前嵌套数据校验模块,用于根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,并调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验;

当前嵌套数据替换模块,用于若当前嵌套数据校验成功,且当前嵌套层数为至少两层,则调用存储当前目标弹幕数据的当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数,并返回执行所述根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据的操作;

目标弹幕数据校验成功模块,用于若当前嵌套数据校验成功,且当前嵌套层数为一层,则确定所述目标弹幕数据校验成功。

第三方面,本发明实施例还提供了一种终端,所述终端包括:

一个或多个处理器;

存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例所提供的基于字符串替换的弹幕校验方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的基于字符串替换的弹幕校验方法。

本发明实施例通过循环方式以及将校验成功的当前嵌套数据替换为预设完整字符串,即占位方式,对预设字符串嵌套结构中的每个嵌套层的弹幕数据进行了校验,从而实现了对预设字符串嵌套结构的目标弹幕数据的完整性校验,进而在目标弹幕数据校验成功后,可以对目标弹幕数据进行正常解析,避免了因弹幕数据异常而导致客户端出现系统崩溃等问题,提高了弹幕测试效率。

附图说明

图1是本发明实施例一提供的一种基于字符串替换的弹幕校验方法的流程图;

图2是本发明实施例二提供的一种基于字符串替换的弹幕校验方法的流程图;

图3是本发明实施例三提供的一种基于字符串替换的弹幕校验装置的结构示意图;

图4是本发明实施例四提供的一种终端的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的一种基于字符串替换的弹幕校验方法的流程图,本实施例可适用于对预设字符串嵌套结构的弹幕数据进行完整性校验的情况,尤其可以用于弹幕服务器中根据预设弹幕协议生成弹幕数据后,对生成的弹幕数据进行校验的应用场景中,同时也可以用于android客户端中对弹幕服务器下发的弹幕数据进行校验的应用场景中。该方法可以由基于字符串替换的弹幕校验装置来执行,该装置可以由软件和/或硬件的方式来实现,可集成于弹幕服务器或者搭载了android系统的具有弹幕功能的终端中,比如智能手机、平板电脑、智能电视或者笔记本电脑等智能终端。如图1所示,该方法具体包括以下步骤:

s110、获取预设字符串嵌套结构的目标弹幕数据,并将目标弹幕数据作为当前目标弹幕数据,将预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数。

其中,弹幕数据可以是指将弹幕参数信息按照预设弹幕协议进行封装后获得的字符串string类型的数据。预设弹幕协议可以根据实际情况和用户需求进行预先设置,用于规定弹幕数据的传输数据结构,以使弹幕服务器与客户端之间可以进行数据传输。预设弹幕协议可以规定一种或多种数据结构。预设字符串嵌套结构可以是预设弹幕协议中规定的一种嵌套式的数据结构。预设字符串嵌套结构与预设弹幕协议相对应。预设嵌套层数是指预设字符串嵌套结构中的嵌套层数。当前目标弹幕数据是指当前时刻对应的目标弹幕数据,当前嵌套层数是指当前时刻对应的嵌套层数,此时的当前目标弹幕数据是指获取的待校验的目标弹幕数据,当前嵌套层数是指预设嵌套层数。需要注意的是,在当前目标弹幕数据为完整的弹幕数据时,当前目标弹幕数据中的嵌套层数等于当前嵌套层数。

示例性地,预设字符串嵌套结构可以为:由预设数量的预设字符串结构形成的预设嵌套层数的嵌套结构;其中,预设数量与预设嵌套层数相等,预设字符串结构为:以预设开始符作为首位字符,以预设分隔符划分各键值对信息,以预设连接符连接键值对信息中的键信息和值信息,以预设结束符作为末位字符。

其中,预设字符串嵌套结构的预设嵌套层数为至少两层,其与预设字符串结构的预设数量相等,具体数值可以根据预设弹幕协议确定。预设开始符、预设分隔符、预设连接符和预设结束符均是预先根据实际情况设置的字符,并且预设开始符与预设结束符一一对应。本实施例中的预设分隔符或者预设连接符包含的预设字符的数量可以为一个,也可以为多个。其中,预设字符可以是预先定义的一种数字、字母或特殊符号等。示例性地,预设开始符可以是但不限于为左花括号“{”、左圆括号“(”和左中括号“[”。为了增加与键值对信息内容之间的区分度,优选为左花括号“{”。预设分隔符可以是但不限于斜杠“\”和“/”。预设连接符可以是但不限于“-”、“@”、“,”“==”和“@=”,预设结束符可以是但不限于右花括号“}”、右圆括号“)”和右中括号“]”,优选为右花括号“}”。本实施例给出的预设字符串嵌套结构的形式可以更加便于数据传输。

具体地,本实施例可以将每个预设字符串结构进行彼此嵌套,以使预设字符串嵌套结构的预设嵌套层数与预设字符串的预设数量相等。也就是说,可以将某个预设字符串结构a视为一个键值对信息,嵌套至另一个预设字符串结构b中,并且以预设分隔符划分预设字符串结构b中的真实键值对信息与预设字符串结构a,从而利用预设字符串结构a和b可以形成两层嵌套。

示例性地,预设字符串嵌套结构的目标弹幕数据为:{type@=uenter/{rid@=104838/{uid@=20088/}/wgei@=0/}/avater@=www@douyu@=tv@com/},其中,该预设字符串嵌套结构是由三个预设字符串结构形成的三层嵌套结构。具体地,先将第一个预设字符串结构的数据{uid@=20088/}视为一个键值对信息,嵌套至第二个预设字符串结构的数据{rid@=104838/wgei@=0/}中,并以预设分隔符“/”进行划分,从而形成两层嵌套,然后再将由两个预设字符串结构形成的两层嵌套结构{rid@=104838/{uid@=20088/}/wgei@=0/}视为一个键值对信息,嵌套至第三个预设字符串结构中{type@=uenter/avater@=www@douyu@=tv@com/},从而形成三层嵌套。

需要注意的是,根据预设弹幕协议的规定,本实施例中的每个键值对信息中的值信息和键信息均不会包含与预设分隔符相同的字符串,而每个键值对信息中的值信息可以不包含与预设连接符相同的字符串,也可以包含与预设连接符相同的字符串。

s120、根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,并调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验,若当前嵌套数据校验成功,则进入步骤s130;若校验失败,则进入步骤s140。。

其中,当前目标弹幕数据和当前嵌套层数均随着循环周期而发生变化。在第一个循环周期时,当前嵌套层数为已知的预设嵌套层数。当前嵌套数据可以是当前目标弹幕数据中某个嵌套层中的弹幕数据,具体可以根据当前嵌套层数进行确定。当前嵌套对象是一个用于存储当前嵌套数据的对象。本实施例中的当前嵌套数据是一个string类型的数据,从而当前嵌套对象也为一个string对象。标识符校验函数是预先定义的,用于校验当前嵌套数据中的标识符数量是否完整的函数,本实施例中可以是指校验预设分隔符数量与预设连接符数量的函数。

具体地,通过调用当前嵌套对象中的标识符校验函数,对当前嵌套对象存储的当前嵌套数据中的标识符数量进行校验,若当前嵌套数据校验成功,即标识符校验函数返回true,则执行步骤s130的操作;若当前嵌套数据校验失败,即标识符校验函数返回false,则执行步骤s140的操作。

可选地,s120中根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,包括:若当前嵌套层数为至少两层,则确定当前目标弹幕数据中最里层的嵌套数据为当前嵌套数据;若当前嵌套层数为一层,则将当前目标弹幕数据直接确定为当前嵌套数据。

其中,当前目标弹幕数据中最里层的嵌套数据是指当前目标弹幕数据中不包含嵌套形式的数据,也就是说,最里层的嵌套数据中的预设开始符的数量和预设结束符的数量均为一个。示例性地,若当前目标弹幕数据为:{type@=uenter/{rid@=104838/{uid@=20088/}/wgei@=0/}/avater@=www@douyu@=tv@com/},当前嵌套层数为三层,则第一层的嵌套数据,即最里层的嵌套数据为:{uid@=20088/};第二层的嵌套数据为:{rid@=104838/{uid@=20088/}/wgei@=0/};第三层的嵌套数据为:{type@=uenter/{rid@=104838/{uid@=20088/}/wgei@=0/}/avater@=www@douyu@=tv@com/}。

具体地,在当前嵌套层数为至少两层时,表明当前目标弹幕数据应为嵌套形式,此时可以将当前目标弹幕数据中最里层的嵌套数据确定为当前嵌套数据,从而获得不包含嵌套形式的当前嵌套数据。在当前嵌套层数为一层时,表明当前目标弹幕数据应为一个非嵌套数据,此时可以直接将当前目标弹幕数据确定为当前嵌套数据。

s130、判断当前嵌套层数是否为至少两层,若是,则进入步骤s150;若否,则进入步骤s160。

具体地,若判断当前嵌套层数为至少两层,即当前嵌套层数大于或等于2,则表明当前目标弹幕数据应为嵌套形式的数据,此时执行步骤s150的操作。若判断当前嵌套层数为一层,则表明当前目标弹幕数据应为非嵌套形式的数据,此时执行步骤s160的操作。

s140、确定目标弹幕数据校验失败。

具体地,在当前嵌套数据校验失败时,表明当前嵌套数据是一条非完整数据,即不符合预设弹幕协议的数据,从而包含当前嵌套数据的目标弹幕数据也是一条非完整数据,此时可以直接确定目标弹幕数据校验失败。

s150、调用存储当前目标弹幕数据的当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数,并返回执行步骤s120的操作。

其中,当前弹幕数据对象是用于存储当前目标弹幕数据的对象,其也是一个string对象。字符串替换函数是预先定义的,用于将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串的函数。预设完整字符串是根据预设弹幕协议预先设置的一个形式简单并完整的非嵌套字符串。示例性的,预设完整字符串可以是一个简单完整的键值对信息,并且不包含预设开始符和预设结束符,比如a@=b,其中a表示键信息,b表示值信息,“@=”表示预设连接符。

具体地,在当前嵌套层数为至少两层时,可以通过调用字符串替换函数,将当前目标弹幕数据中包含一个预设开始符和一个预设结束符的当前嵌套数据替换为一个不包含预设开始符和预设结束符的预设完整字符串,即减少当前目标弹幕数据中的一个嵌套层,从而可以将当前嵌套层数减1。本实施例将当前目标弹幕数据更新为替换后的弹幕数据,相应地,此时的当前嵌套层数为减1后的层数,并返回执行步骤s120的操作,以便对此时的当前目标弹幕数据进行校验。

示例性地,若当前目标弹幕数据为:{type@=uenter/{rid@=104838/{uid@=20088/}/wgei@=0/}/avater@=www@douyu@=tv@com/},当前嵌套数据为:{uid@=20088/},当前嵌套层数为三层,则在当前嵌套数据校验成功时,通过调用字符串替换函数,可以将当前嵌套数据{uid@=20088/}替换为a@=b,即替换后的当前目标弹幕数据为:{type@=uenter/{rid@=104838/a@=b/wgei@=0/}/avater@=www@douyu@=tv@com/},可见,替换后的当前目标弹幕数据对应的当前嵌套层数为两层,并且在下一个循环周期内可以对当前嵌套数据{rid@=104838/a@=b/wgei@=0/}进行校验,从而可以通过替换为预设完整字符串的方式逐层校验目标弹幕数据的完整性,使得校验过程更加便捷。

需要注意的是,本实施例中的预设完整字符串为一个完整合法数据,使得在校验包含预设完整字符串的当前嵌套数据时,不会由于预设完整字符串而导致当前嵌套数据校验失败,从而在当前嵌套数据校验失败时,便可表明当前嵌套数据中除预设完整字符串之外的真实弹幕数据是一条不完整的数据。

s160、确定目标弹幕数据校验成功。

具体地,在当前嵌套层数为一层时,表明目标弹幕数据中的每个嵌套层的弹幕数据均已校验完毕,并且均校验成功,即目标弹幕数据是一条完整的数据,可以被正常解析,此时可以确定目标弹幕数据校验成功。

需要注意的是,本实施例可以将步骤s120-s160所提供的功能进行封装为一个弹幕校验函数,从而只需将存储目标弹幕数据的弹幕数据对象作为弹幕校验函数的输入对象,通过调用弹幕校验函数,即可实现目标基于字符串替换的弹幕校验过程,使得弹幕校验更加便捷。示例性地,弹幕校验函数可以定义为:publisstaticbooleancheckdanminfo(stringdanmustr)。其中,checkdanminfo是弹幕校验函数的函数名称,danmustr是字符串string类型的弹幕数据对象,弹幕校验函数checkdanminfo的返回值是一个布尔boolean类型的对象。若目标弹幕数据校验成功,则弹幕校验函数checkdanminfo可以通过调用returntrue返回true,若目标弹幕数据校验失败,则弹幕校验函数checkdanminfo可以调用returnfalse返回false。弹幕校验函数checkdanminfo具有公有权限修饰符public和静态类型修饰符static,以便可以直接通过类调用checkdanminfo,提高了弹幕校验函数调用的便捷性。

可选地,在弹幕服务器向android客户端下发目标弹幕数据之前,可以利用本实施例所提供的基于字符串替换的弹幕校验方法进行校验,并在目标弹幕数据校验成功后,再进行目标弹幕数据的下发操作,以保证弹幕服务器下发的目标弹幕数据为准确完整的数据。android客户端接收下发的目标弹幕数据后,可以利用本实施例所提供的基于字符串替换的弹幕校验方法进行再次校验,并在目标弹幕数据校验成功后,再对目标弹幕数据进行解析处理,从而可以避免因弹幕数据异常而导致客户端出现系统崩溃等问题,提高了弹幕测试效率。

本发明实施例通过循环方式以及将校验成功的当前嵌套数据替换为预设完整字符串,即占位方式,对预设字符串嵌套结构中的每个嵌套层的弹幕数据进行了校验,从而实现了对预设字符串嵌套结构的目标弹幕数据的完整性校验,进而在目标弹幕数据校验成功后,可以对目标弹幕数据进行正常解析,避免了因弹幕数据异常而导致客户端出现系统崩溃等问题,提高了弹幕测试效率。

在上述技术方案的基础上,s110可以包括:获取待校验弹幕数据以及待校验弹幕数据对应的待校验数据标识;将待校验数据标识与预设字符串嵌套结构对应的标识集合中的数据标识进行匹配;若匹配成功,则将待校验弹幕数据确定为目标弹幕数据。

其中,待校验弹幕数据可以是将弹幕参数信息按照预设弹幕协议进行封装后获得的任一数据结构的弹幕数据。每个待校验弹幕数据均对应一个待校验数据标识。待校验数据标识用于对待校验弹幕数据进行唯一标识,以通过待校验数据标识可以确定待校验弹幕数据的数据结构。预设字符串嵌套结构对应的标识集合可以包括:数据结构为预设字符串嵌套结构的所有弹幕数据对应的数据标识。

具体地,若预设弹幕协议规定了多种数据结构,则在生成某个弹幕数据时,可以预先检测生成的弹幕数据的数据结构是否为预设字符串嵌套结构,若是,则将该弹幕数据对应的数据标识添加至预设字符串嵌套结构对应的标识集合中,从而将生成的数据结构为预设字符串嵌套结构的弹幕数据对应的数据标识均添加至该标识集合中,以便进行后续的校验操作。在获取待校验弹幕数据对应的待校验数据标识后,可以将待校验数据标识与预设字符串嵌套结构对应的标识集合中的数据标识进行逐一匹配,若待校验数据标识与标识集合中的任一数据标识匹配成功,则表明该待校验弹幕数据的数据结构为预设字符串嵌套结构,此时可以将该待校验弹幕数据确定为目标弹幕数据,以便对目标弹幕数据进行完整性校验。若待校验数据标识与标识集合中的每个数据标识均匹配失败,则表明该待校验弹幕数据的数据结构不是预设字符串嵌套结构,此时可以对下一待校验弹幕数据进行标识匹配,直至获取预设字符串嵌套结构的目标弹幕数据。

实施例二

图2为本发明实施例二提供的一种基于字符串替换的弹幕校验方法的流程图,本实施例在上述实施例的基础上进行优化:“在将目标弹幕数据作为当前目标弹幕数据之前,还包括对目标弹幕数据中的首位字符和末位字符进行字符验证的过程”。在此基础上,还可以进一步对“确定当前目标弹幕数据中最里层的嵌套数据为当前嵌套数据”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。

参见图2,本实施例提供的基于字符串替换的弹幕校验方法包括以下步骤:

s210、获取预设字符串嵌套结构的目标弹幕数据。

s220、调用存储目标弹幕数据的弹幕数据对象中的第一字符验证函数,检测目标弹幕数据中的首位字符是否为预设开始符。

其中,弹幕数据对象是一个用于存储目标弹幕数据的对象。本实施例中的目标弹幕数据是一个string类型的数据,从而弹幕数据对象为一个string对象。第一字符验证函数可以是预先定义的,用于对目标弹幕数据中的首位字符进行验证的函数。示例性地,将弹幕数据对象标记为danmustr,若预设开始符为“{”,则调用第一字符验证函数可以是danmustr.startwith(“{”),以检测弹幕数据对象danmustr中的目标弹幕数据中的首位字符是否为“{”。

具体地,在调用第一字符验证函数后,若检测目标弹幕数据中的首位字符不是预设开始符,则表明首位字符验证失败,也就是目标弹幕数据是一条不完整的数据,即不合格数据,此时可以直接确定目标弹幕数据校验失败。若检测目标弹幕数据中的首位字符是预设开始符,则表明首位字符验证成功,此时可以进行后续的验证操作。

s230、若首位字符为预设开始符,则调用弹幕数据对象中的第二字符验证函数,检测目标弹幕数据中的末位字符是否为预设结束符。

其中,第二字符验证函数是预先定义的,用于对目标弹幕数据中的末位字符进行校验的函数。示例性地,将弹幕数据对象标记为danmustr,若预设结束符为“}”,则可以调用第二字符验证函数可以为danmustr.endwith(“}”),以检测弹幕数据对象danmustr中的目标弹幕数据中的末位字符是否为“}”。

具体地,在目标弹幕数据的首位字符为预设开始符时,可以继续调用第二字符验证函数,检测目标弹幕数据中的末位字符是否为预设结束符,若否,则表明末位字符验证失败,此时可以直接确定目标弹幕数据校验失败;若是,则表明末位字符验证成功,此时可以进行后续的验证操作。

s240、若末位字符为预设结束符,则将目标弹幕数据作为当前目标弹幕数据,将预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数。

具体地,在末位字符为预设结束符时,表明目标弹幕数据中的首位字符和末位字符均是合法的,此时可以将目标弹幕数据作为当前目标弹幕数据,将预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数,以便进行后续的循环校验操作。

s250、判断当前嵌套层数是否为至少两层,若是,则进入步骤s260;若否,则进入步骤s270。

s260、根据当前目标弹幕数据中的当前嵌套层数,确定最里层的嵌套数据中目标预设开始符对应的目标开始序数以及目标预设结束符对应的目标结束序数,并进入步骤s280。

其中,最里层的嵌套数据包含一个预设开始符和一个预设结束符,即目标预设开始符和目标预设结束符。目标开始序数是指目标预设开始符在当前目标弹幕数据中出现的序数。目标结束序数是指目标预设结束符在当前目标弹幕数据中出现的序数,本实施例中的目标结束序数可以直接确定为第一次,也就是说,目标预设结束符为当前目标弹幕数据中第一次出现的预设结束符。

具体地,若当前嵌套层数为n(n≥2),则最里层的嵌套数据中目标预设开始符对应的目标开始序数可以确定为第n次,目标预设结束符对应的目标结束序数确定为第一次。示例性地,若当前目标弹幕数据为:{type@=uenter/{rid@=104838/{uid@=20088/}/wgei@=0/}/avater@=www@douyu@=tv@com/},则最里层的嵌套数据{uid@=20088/}中的目标预设开始符“{”是当前目标弹幕数据中第三次出现的,即目标开始序数为第三次;嵌套数据{uid@=20088/}中的目标预设结束符“}”是当前目标弹幕数据中第一次出现的,即目标结束序数为第一次。

s270、将当前目标弹幕数据直接确定为当前嵌套数据,并进入步骤s291。

s280、调用字符串工具类中的位置确定函数,根据目标开始序数确定目标预设开始符对应的目标开始位置,并根据目标结束序数确定目标预设结束符对应的目标结束位置。

其中,位置确定函数是预先定义的,用于确定当前目标弹幕数据中目标预设开始符所在的位置(即目标开始位置)以及目标结束符所在的位置(即目标结束位置)的函数。示例性地,可以将当前目标弹幕数据danmustr1、预设开始符“{”和目标开始序数x作为函数输入参数,调用开源的字符串工具类stringutils中的位置确定函数stringutils.ordinalindexof(danmustr1,"{",x)来确定在当前目标弹幕数据中第x个预设开始符(即目标预设开始符)出现的位置(即目标开始位置)。同理,可以将当前目标弹幕数据danmustr1、预设结束符“}”和目标结束序数y作为函数输入参数,调用位置确定函数stringutils.ordinalindexof(danmustr1,"}",y)来确定在当前目标弹幕数据中第y个预设结束符(即目标预设结束符)出现的位置(即目标结束位置)。

需要注意的是,若当前目标弹幕数据中的实际嵌套层数小于当前嵌套层数,则根据目标开始序数和目标结束序数便无法确定目标开始位置和目标结束位置,即位置确定函数返回一个错误信息,此时表明当前目标弹幕数据是一个不完整的数据,即可以直接确定目标弹幕数据校验失败。示例性地,当前目标弹幕数据为:{type@=uenter/{rid@=104838/wgei@=0/}/avater@=www@douyu@=tv@com/},当前嵌套层数为三层,则确定的目标开始序数为第三个,而当前目标弹幕数据中仅存在两个预设开始符,从而无法获得目标开始位置。

s290、调用当前弹幕数据对象中的字符串提取函数,根据目标开始位置和目标结束位置,提取当前目标弹幕数据中最里层的嵌套数据,作为当前嵌套数据,并进入s291。

其中,字符串提取函数是预先定义的,用于提取当前目标弹幕数据中目标开始位置与目标结束位置之间的子字符串的函数。示例性地,字符串提取函数可以是danmustr1.substring(startpos,endpos),提取的最里层的嵌套数据中的第一个字符的位置为startpos,最后一个字符的位置为endpos-1。

具体地,本实施例中的当前嵌套数据包含目标预设开始符和目标预设结束符,目标开始位置为startpos,目标结束位置为endpos,则对应的提取范围为(startpos,endpos1+1),使得提取的最里层的嵌套数据中包含目标预设开始符和目标预设结束符,并将提取出来的弹幕数据确定为当前嵌套数据。

s291、调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验。若当前嵌套数据校验成功,则进入步骤s292;若校验失败,则进入步骤s293。

本实施例可以存在多种校验当前嵌套数据的方式。示例性地,标识符校验函数可以通过如下步骤实现对当前嵌套数据中的标识符数量进行校验的功能:调用当前嵌套对象中的字符串分割函数,将当前嵌套数据以预设分隔符进行分割,确定字符串数组;根据字符串数组的数组长度,确定当前嵌套数据中的预设分隔符数量;将字符串数组中的每个字符串元素存储至对应的字符串对象中,并调用各字符串对象中的标识符查找函数,确定当前嵌套数据中的预设连接符数量;若预设分隔符数量等于预设连接符数量,则确定当前嵌套数据校验成功。

具体地,可以通过以预设分隔符为函数输入对象,调用当前嵌套对象danmustr1中的字符串分割函数splitsrtarray=danmustr1.split(“/”),将当前嵌套数据以预设分隔符“/”进行分割获得的字符串元素存储至字符串数组splitsrtarray中。通过根据字符串数组的长度属性,即调用splitsrtarray.length来获得数组长度。对于完整合法的当前嵌套数据而言,数组长度比预设分隔符数量多1,从而将数组长度减1得到的数值确定为预设分隔符数量。将字符串数组中的每个字符串元素存储至对应的字符串对象中,即字符串元素与字符串对象一一对应,通过以预设连接符作为函数输入参数,调用每个字符串对象tmpstr中的标识符查找函数tmpstr.contains(“@=”),检测每个字符串对象存储的字符串元素是否包含预设连接符“@=”,从而统计预设连接符数量。通过对完整的当前嵌套数据的结构进行分析,可以看出:在当前嵌套数据完整时,预设分隔数等于预设连接符数量。从而通过检验预设分隔数与预设连接符数量是否相等来检测当前嵌套数据的校验结果,若相等,则确定当前嵌套数据校验成功;若不相等,则确定当前嵌套数据校验失败。

在本实施例中,对于字符串元素为“avater@=www@douyu@=tv@com”的情况而言,预设连接符数量应该为1,而不是2,若利用与预设连接符进行字符匹配的方式,则无法准确地确定预设连接符数量,从而本实施例中标识符查找函数仅关注于一个字符串元素中是否存在预设连接符,并不关注该字符串元素中包含的预设连接符数量,从而该校验方式也可以适用于至少一个值信息包含与预设连接符相同的字符串的情况。

需要注意的是,若当前目标弹幕数据中的实际嵌套层数大于当前嵌套层数,则根据目标开始位置和目标结束位置确定的当前嵌套数据并不是当前目标弹幕数据中真正最里层的嵌套数据。示例性地,当前目标弹幕数据为:{type@=uenter/{rid@=104838/{uid@=20088/}/wgei@=0/}/avater@=www@douyu@=tv@com/},当前嵌套层数为二层,则确定的目标开始序数为第二个,目标结束序列确定为第一个,从而实际提出的当前嵌套数据为:{rid@=104838/{uid@=20088/}/wgei@=0/}。可见,这种当前嵌套数据中的预设分隔符数量并不等于预设连接符数量,从而这种当前嵌套数据的校验结果一定不成功,以便可以确定当前嵌套数据校验失败,进而确定目标弹幕数据校验失败。

s292、判断当前嵌套层数是否为至少两层,若是,则进入步骤s294;若否,则进入步骤s295。

s293、确定目标弹幕数据校验失败。

s294、调用当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数,并返回执行步骤s250的操作。

示例性地,本实施例可以将目标开始位置startpos、目标结束位置endpos以及预设完整字符串“a@=b”作为函数输入参数,调用当前弹幕数据对象danmustr1中的字符串替换函数danmustr1.replace(startpos,endpos,"a@=b"),将danmustr1中存储的当前目标弹幕数据中从startpos位置到endpos位置的数据(即当前嵌套数据)替换为一个预设完整字符串“a@=b”。

s295、确定目标弹幕数据校验成功。

本发明实施例的技术方案,在将目标弹幕数据作为当前目标弹幕数据之前,通过调用存储目标弹幕数据的弹幕数据对象中的第一字符验证函数和第二字符验证函数,分别对目标弹幕数据中的首位字符和末位字符进行字符验证,在首位字符验证失败或末位字符验证失败时,直接确定目标弹幕数据校验失败,在首位字符和末位字符均验证成功后,再进行后续地校验操作,从而提高了目标弹幕数据校验的严格性,使得目标弹幕数据更具完整性。本实施例还通过调用字符串工具类中的位置确定函数,更加快速地确定目标开始位置和目标结束位置,从而通过调用当前弹幕数据对象中的字符串提取函数,根据目标开始位置和目标结束位置,提取当前目标弹幕数据中最里层的嵌套数据,从而可以更加便捷地获得当前嵌套数据,进而提高了校验效率。

实施例三

图3为本发明实施例三提供的一种基于字符串替换的弹幕校验装置的结构示意图,本实施例可适用于对预设字符串嵌套结构的弹幕数据进行完整性校验的情况,该装置具体可以包括:目标弹幕数据获取模块310、当前嵌套数据校验模块320、当前嵌套数据替换模块330和目标弹幕数据校验成功模块340。

其中,目标弹幕数据获取模块310,用于获取预设字符串嵌套结构的目标弹幕数据,并将目标弹幕数据作为当前目标弹幕数据,将预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数;当前嵌套数据校验模块320,用于根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,并调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验;当前嵌套数据替换模块330,用于若当前嵌套数据校验成功,且当前嵌套层数为至少两层,则调用存储当前目标弹幕数据的当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数,并返回执行根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据的操作;目标弹幕数据校验成功模块340,用于若当前嵌套数据校验成功,且当前嵌套层数为一层,则确定目标弹幕数据校验成功。

本发明实施例的技术方案,通过循环方式以及将校验成功的当前嵌套数据替换为预设完整字符串,即占位方式,对预设字符串嵌套结构中的每个嵌套层的弹幕数据进行了校验,从而实现了对预设字符串嵌套结构的目标弹幕数据的完整性校验,进而在目标弹幕数据校验成功后,可以对目标弹幕数据进行正常解析,避免了因弹幕数据异常而导致客户端出现系统崩溃等问题,提高了弹幕测试效率。

可选地,预设字符串嵌套结构为:由预设数量的预设字符串结构形成的预设嵌套层数的嵌套结构;其中,预设数量与预设嵌套层数相等,预设字符串结构为:以预设开始符作为首位字符,以预设分隔符划分各键值对信息,以预设连接符连接键值对信息中的键信息和值信息,以预设结束符作为末位字符。

可选地,当前嵌套数据校验模块320,包括:

第一当前嵌套数据确定单元,用于若当前嵌套层数为至少两层,则确定当前目标弹幕数据中最里层的嵌套数据为当前嵌套数据;

第二当前嵌套数据确定单元,用于若当前嵌套层数为一层,则将当前目标弹幕数据直接确定为当前嵌套数据。

可选地,第一当前嵌套数据确定单元,具体用于:

根据当前嵌套层数,确定最里层的嵌套数据中目标预设开始符对应的目标开始序数以及目标预设结束符对应的目标结束序数;

调用字符串工具类中的位置确定函数,根据目标开始序数确定目标预设开始符对应的目标开始位置,并根据目标结束序数确定目标预设结束符对应的目标结束位置;

调用当前弹幕数据对象中的字符串提取函数,根据目标开始位置和目标结束位置,提取当前目标弹幕数据中最里层的嵌套数据,作为当前嵌套数据。

可选地,当前嵌套数据校验模块320还包括:标识符校验函数执行单元,用于通过如下步骤实现对当前嵌套数据中的标识符数量进行校验的功能:

调用当前嵌套对象中的字符串分割函数,将当前嵌套数据以预设分隔符进行分割,确定字符串数组;根据字符串数组的数组长度,确定当前嵌套数据中的预设分隔符数量;将字符串数组中的每个字符串元素存储至对应的字符串对象中,并调用各字符串对象中的标识符查找函数,确定当前嵌套数据中的预设连接符数量;若预设分隔符数量等于预设连接符数量,则确定当前嵌套数据校验成功。

可选地,该装置还包括:

首位字符校验模块,用于在将目标弹幕数据作为当前目标弹幕数据之前,调用存储目标弹幕数据的弹幕数据对象中的第一字符验证函数,检测目标弹幕数据中的首位字符是否为预设开始符;

末位字符校验模块,用于若首位字符为预设开始符,则调用弹幕数据对象中的第二字符验证函数,检测目标弹幕数据中的末位字符是否为预设结束符;

相应地,目标弹幕数据获取模块310,还用于:若末位字符为预设结束符,则将目标弹幕数据作为当前目标弹幕数据。

可选地,目标弹幕数据获取模块310,具体用于:

获取待校验弹幕数据以及待校验弹幕数据对应的待校验数据标识;将待校验数据标识与预设字符串嵌套结构对应的标识集合中的数据标识进行匹配;若匹配成功,则将待校验弹幕数据确定为目标弹幕数据。

本发明实施例所提供的基于字符串替换的弹幕校验装置可执行本发明任意实施例所提供的基于字符串替换的弹幕校验方法,具备执行基于字符串替换的弹幕校验方法相应的功能模块和有益效果。

值得注意的是,上述基于字符串替换的弹幕校验装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

实施例四

图4是本发明实施例四提供的一种终端的结构示意图。参见图4,该终端包括:

一个或多个处理器410;

存储器420,用于存储一个或多个程序;

当一个或多个程序被一个或多个处理器410执行,使得一个或多个处理器410实现如上述实施例中任一实施例提出的基于字符串替换的弹幕校验方法,该方法包括:

获取预设字符串嵌套结构的目标弹幕数据,并将目标弹幕数据作为当前目标弹幕数据,将预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数;

根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,并调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验;

若当前嵌套数据校验成功,且当前嵌套层数为至少两层,则调用存储当前目标弹幕数据的当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数;

返回执行根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据的操作;

若当前嵌套数据校验成功,且当前嵌套层数为一层,则确定目标弹幕数据校验成功。

图4中以一个处理器410为例;终端中的处理器410和存储器420可以通过总线或其他方式连接,图4中以通过总线连接为例。

存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于字符串替换的弹幕校验方法对应的程序指令/模块(例如,基于字符串替换的弹幕校验装置中的目标弹幕数据获取模块310、当前嵌套数据校验模块320、当前嵌套数据替换模块330和目标弹幕数据校验成功模块340)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述的基于字符串替换的弹幕校验方法。

存储器420主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

本实施例提出的终端与上述实施例提出的基于字符串替换的弹幕校验方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行基于字符串替换的弹幕校验方法相同的有益效果。

实施例五

本实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的基于字符串替换的弹幕校验方法,该方法包括:

获取预设字符串嵌套结构的目标弹幕数据,并将目标弹幕数据作为当前目标弹幕数据,将预设字符串嵌套结构对应的预设嵌套层数作为当前嵌套层数;

根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据,并调用存储当前嵌套数据的当前嵌套对象中的标识符校验函数,对当前嵌套数据中的标识符数量进行校验;

若当前嵌套数据校验成功,且当前嵌套层数为至少两层,则调用存储当前目标弹幕数据的当前弹幕数据对象中的字符串替换函数,将当前目标弹幕数据中的当前嵌套数据替换为预设完整字符串,以更新当前目标弹幕数据,且将当前嵌套层数减1,以更新当前嵌套层数;

返回执行根据当前嵌套层数,确定当前目标弹幕数据中的当前嵌套数据的操作;

若当前嵌套数据校验成功,且当前嵌套层数为一层,则确定目标弹幕数据校验成功。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所提供的基于字符串替换的弹幕校验方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1