基于链表方式的弹幕校验方法、装置、终端及存储介质与流程

文档序号:16928033发布日期:2019-02-22 20:01阅读:246来源:国知局
基于链表方式的弹幕校验方法、装置、终端及存储介质与流程

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



背景技术:

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

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

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



技术实现要素:

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

第一方面,本发明实施例提供了一种基于链表方式的弹幕校验方法,包括:

获取预设字符串嵌套结构的目标弹幕数据,其中,所述预设字符串嵌套结构包含至少两个预设开始符和至少两个预设结束符;

调用存储所述目标弹幕数据的弹幕数据对象中的字符串转换函数,将所述目标弹幕数据转换为第一字符数组,并对所述第一字符数组中的字符元素进行遍历,确定所述目标弹幕数据中的预设开始符数量和预设结束符数量;

若所述预设开始符数量等于所述预设结束符数量,则基于链表结构的字符去除方式,去除所述第一字符数组中的各所述预设开始符和各所述预设结束符,获得待测弹幕数据;

调用存储所述待测弹幕数据的待测弹幕对象中的标识符确定函数,确定所述待测弹幕数据中的预设标识符数量,并在所述预设标识符数量满足预设校验条件时,确定所述目标弹幕数据校验成功。

第二方面,本发明实施例还提供了一种基于链表方式的弹幕校验装置,包括:

目标弹幕数据获取模块,用于获取预设字符串嵌套结构的目标弹幕数据,其中,所述预设字符串嵌套结构包含至少两个预设开始符和至少两个预设结束符;

字符数量确定模块,用于调用存储所述目标弹幕数据的弹幕数据对象中的字符串转换函数,将所述目标弹幕数据转换为第一字符数组,并对所述第一字符数组中的字符元素进行遍历,确定所述目标弹幕数据中的预设开始符数量和预设结束符数量;

待测弹幕数据确定模块,用于若所述预设开始符数量等于所述预设结束符数量,则基于链表结构的字符去除方式,去除所述第一字符数组中的各所述预设开始符和各所述预设结束符,获得待测弹幕数据;

目标弹幕数据校验模块,调用存储所述待测弹幕数据的待测弹幕对象中的标识符确定函数,确定所述待测弹幕数据中的预设标识符数量,并在所述预设标识符数量满足预设校验条件时,确定所述目标弹幕数据校验成功。

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

一个或多个处理器;

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

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

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

本实施例的技术方案,通过将预设字符串嵌套结构的目标弹幕数据存储至弹幕数据对象中,调用弹幕数据对象中的字符串转换函数,将目标弹幕数据转换为第一字符数组,并对第一字符数组中的字符元素进行遍历,确定目标弹幕数据中的预设开始符数量和预设结束符数量;在预设开始符数量等于预设结束符数量时,基于链表结构的字符去除方式,去除第一字符数组中的各预设开始符和各预设结束符,从而可以更加快速地获得非嵌套的待测弹幕数据;并在待测弹幕数据中的预设标识符数量满足预设校验条件时,确定目标弹幕数据校验成功。通过采用上述技术方案,对预设字符串嵌套结构的目标弹幕数据进行了完整性校验,从而在目标弹幕数据校验成功后,可以对目标弹幕数据进行正常解析,进而避免了因弹幕数据异常而导致客户端出现系统崩溃等问题,提高了弹幕测试效率。

附图说明

图1是本发明实施例一提供的一种基于链表方式的弹幕校验方法的流程图;

图2是本发明实施例二提供的一种基于链表方式的弹幕校验方法的流程图;

图3是本发明实施例三提供的一种基于链表方式的弹幕校验装置的结构示意图;

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

具体实施方式

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

实施例一

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

s110、获取预设字符串嵌套结构的目标弹幕数据,其中,预设字符串嵌套结构包含至少两个预设开始符和至少两个预设结束符。

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

本实施例中的预设开始符与预设结束符均可以是预先定义的一种特殊符号。用于标识嵌套式的结构,且预设开始符与预设结束符一一对应。示例性地,预设开始符可以是但不限于为左花括号“{”、左圆括号“(”或左中括号“[”。为了增加与字符串本体内容之间的区分度,优选为左花括号“{”。预设结束符可以是但不限于右花括号“}”、右圆括号“)”或右中括号“]”,优选为右花括号“}”。预设字符串嵌套结构中以一个预设开始符和一个预设结束符来标识一个嵌套子结构,预设字符串嵌套结构中的嵌套子结构的个数可以根据预设弹幕协议预先确定,且嵌套子结构为至少两个,即预设开始符和预设结束符均为至少两个。预设开始符数量和预设结束符数量均与嵌套子结构相等。示例性地,若以“{”为预设开始符,以“}”为预设结束符,并且嵌套子结构的数量为3个,则预设字符串嵌套结构的目标弹幕数据可以为:{absd{afgd{sddw}ssfg}amms},或者{absd{afgd}ssfg{sddw}amms}等。

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

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

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

s120、调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数,将目标弹幕数据转换为第一字符数组,并对第一字符数组中的字符元素进行遍历,确定目标弹幕数据中的预设开始符数量和预设结束符数量。

其中,弹幕数据对象是一个用于存储目标弹幕数据的对象。本实施例中的目标弹幕数据是一个string类型的数据,从而弹幕数据对象为一个string对象。字符串转换函数是预先定义的,用于将目标弹幕数据转换为一个字符数组的函数。第一字符数组中的字符顺序与目标弹幕数据中的字符顺序保持一致。示例性地,若将弹幕数据对象标记为danmustr1,则danmustr1中的字符串转换函数可以为:danmustr1.tochararray(),从而可以将danmustr1中存储的目标弹幕数据转换为一个第一字符数组。

具体地,假设弹幕数据对象danmustr1中存储的目标弹幕数据为:abcd,通过调用danmustrchar1=danmustr1.tochararray(),则将danmustr1的每一个下标位的对象保存在第一字符数组danmustrchar1中,即danmustrchar1为:{‘a’,‘b’,‘c’,‘d’}。本实施例在对第一字符数组中的字符元素进行遍历时,可以一次性地将第一字符数组中的每个字符元素与预设开始符进行匹配,将匹配成功的次数确定为目标弹幕数据中的预设开始符数量,以及将第一字符数组中的每个字符元素与预设结束符进行匹配,将匹配成功的次数确定为目标弹幕数据中的预设结束符数量;也可以通过循环遍历的方式,于每次循环周期中,将字符元素分别与预设开始符和预设结束符进行匹配,从而可以快速确定预设开始符数量和预设结束符数量,提升计算速度。

s130、若预设开始符数量等于预设结束符数量,则基于链表结构的字符去除方式,去除第一字符数组中的各预设开始符和各预设结束符,获得待测弹幕数据。

其中,链表结构由多个节点组成,每个节点均包括节点数据和节点指针,其中节点指针用于指示后续节点数据的位置信息,以建立各节点的逻辑顺序。基于链表结构的字符去除方式是指利用链表数据结构,去除第一字符数组中所有的预设开始符和所有的预设结束符的方式。待测弹幕数据是指不包含预设开始符和预设结束符的弹幕数据,即非嵌套弹幕数据。通过对预设字符串嵌套结构分析可得,完整合法的目标弹幕数据中的预设开始符数量等于预设结束符数量。

具体地,通过检测预设开始符数量是否等于预设结束符数量,来校验目标弹幕数据中的预设开始符和预设结束符是否完整。若预设开始符数量不等于预设结束符数量,则表明目标弹幕数据中的预设开始符和预设结束符不是一一对应关系,即为一条非法数据,此时可以直接确定目标弹幕数据校验失败。若预设开始符数量等于预设结束符数量,则表明目标弹幕数据中的预设开始符和预设结束符一一对应,此时可以进行后续的校验操作,即基于链表结构的字符去除方式,去除第一字符数组中所有的预设开始符和所有的预设结束符,并将去除后的弹幕数据确定为待测弹幕数据。

示例性地,s130中获得待测弹幕数据的操作包括:将第一字符数组转换为第一字符链表;对第一字符链表中的各节点进行遍历,删除第一字符链表中的各预设开始符及各预设结束符对应的节点,获得第二字符链表;将第二字符链表转换为第二字符数组,并将第二字符数组转换为待测字符串,作为待测弹幕数据。

具体地,将第一字符数组中的每个字符元素作为一个节点数据存储至第一字符链表中对应的节点中,并根据第一字符数组中的字符元素顺序,构建每个节点中节点指针的指向,以使第一字符链表中的节点顺序与第一字符数组中的元素顺序一致。本实施例可以一次性地对第一字符链表中的节点进行遍历,删除第一字符链表中节点数据为预设开始符或者预设结束符的所有节点,并将删除后的第一字符链表确定为第二字符链表;也可以进行循环遍历,以提升删除速度。然后根据第二字符链表中的节点顺序,将第二字符链表中的每个节点数据作为一个字符元素存储至第二字符数组中,从而利用链表方式,可以快速地将包含预设开始符和预设结束符的第一字符数组转换为不包含预设开始符和预设结束符的第二字符数组。在确定第二字符数组后,可以通过调用存储第二字符数组danmustrchar2的字符数组对象chararray2中的数组转换函数chararray2.tostring(),将第二字符数组danmustrchar2转换为一个字符串string类型的待测字符串,并将待测字符串作为待测弹幕数据,此时的待测弹幕数据为一个string类型的数据。

需要注意的是,相对于直接利用系统函数中的字符替换函数.replaceall(),将目标弹幕数据中的预设开始符和预设结束符替换为空字符串的方式而言,本实施例利用的基于链表结构的字符去除方式,由于性能损坏较低、内存占用空间较小,从而使得预设开始符和预设结束符的去除速度更快,提升了运行效率。

s140、调用存储待测弹幕数据的待测弹幕对象中的标识符确定函数,确定待测弹幕数据中的预设标识符数量,并在预设标识符数量满足预设校验条件时,确定目标弹幕数据校验成功。

其中,待测弹幕对象是一个用于存储待测弹幕数据的对象。本实施例中的待测弹幕数据是一个string类型的数据,从而待测弹幕对象也为一个string对象。标识符确定函数是预设定义的,用于确定待测弹幕数据中的预设标识符数量的函数。本实施例中的预设标识符是基于预设弹幕协议规定的预设字符串嵌套结构中具有特定含义的字符或字符串。预设标识符可以包括一个预设字符,也可以包括多个预设字符,其中,预设字符可以是预先定义的一种数字、字母或特殊符号等。本实施例中的预设字符串嵌套结构可以包括一种预设标识符,也可以包括多种预设标识符,预设标识符的种类数量可以由预设弹幕协议预先规定。预设校验条件是指在弹幕数据完整时,预设标识符数量需要满足的条件。示例性地,若预先获取了某个目标弹幕数据中预设标识符的准确数量为10,则预设校验条件可以为:目标弹幕数据中的预设标识符数量为10。

本实施例中确定预设标识符数量的方式可以有多种。示例性地,当预设字符串嵌套结构只包括一种预设标识符,且该预设标识符只包括一个预设字符时,标识符确定函数可以通过如下步骤实现确定待测弹幕数据中的预设标识符数量的功能:调用存储待测弹幕数据的待测弹幕对象中的字符串转换函数,将待测弹幕数据转换为字符数组,并可以将字符数组中的每个字符元素与预设标识符进行字符匹配,将字符匹配成功的数量确定为待测弹幕数据中的预设标识符数量。

当预设字符串嵌套结构只包括一种预设标识符,且该预设标识符包括至少两个预设字符时,标识符确定函数可以通过如下步骤实现确定待测弹幕数据中的预设标识符数量的功能:调用存储待测弹幕数据的待测弹幕对象中的字符串分割函数,将待测弹幕数据以预设标识符进行分割,确定字符串数组;根据字符串数组的数组长度,确定待测弹幕数据中的预设标识符数量。具体地,若将待测弹幕对象标记为danmustr2,预设标识符为ab,则通过调用待测弹幕对象danmustr2中的字符串分割函数splitsrtarray=danmustr2.split(“\ab”),将待测弹幕数据以ab进行分割获得的字符串数据存储至字符串数组splitsrtarray中,然后可以通过调用splitsrtarray.length,获得字符串数组splitsrtarray的数组长度,根据预设字符串嵌套结构可以预先确定准确完整的弹幕数据对应的字符串数组的数组长度与预设标识符数量之间的运算关系,从而可以基于该运算关系,根据数组长度计算待测弹幕数据中的预设标识符数量。示例性地,若准确完整的弹幕数据为:xadyabz,则以预设标识符ab进行分割后的字符串数组包括三个元素,分别为:x、y和z,即该字符串数组的数组长度为3,预设标识符ab数量为2,从而可知运算关系为:字符串数组的数组长度比预设标识符数量多1。基于该运算关系,可以将字符串数组的数组长度减1得到的差值确定为待测弹幕数据中的预设标识符数量。

具体地,在确定预设标识符数量后,需要检测预设标识符数量是否满足预设校验条件,若满足,则表明目标弹幕数据是一条完整的数据,可以被正常解析,此时可以确定目标弹幕数据校验成功。若预设标识符的数量不满足预设检验条件,则表明目标弹幕数据是一条非法数据,此时确定目标弹幕数据校验失败。

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

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

本实施例的技术方案,通过将预设字符串嵌套结构的目标弹幕数据存储至弹幕数据对象中,调用弹幕数据对象中的字符串转换函数,将目标弹幕数据转换为第一字符数组,并对第一字符数组中的字符元素进行遍历,确定目标弹幕数据中的预设开始符数量和预设结束符数量;在预设开始符数量等于预设结束符数量时,基于链表结构的字符去除方式,去除第一字符数组中的各预设开始符和各预设结束符,从而可以更加快速地获得非嵌套的待测弹幕数据;并在待测弹幕数据中的预设标识符数量满足预设校验条件时,确定目标弹幕数据校验成功。通过采用上述技术方案,对预设字符串嵌套结构的目标弹幕数据进行了完整性校验,从而在目标弹幕数据校验成功后,可以对目标弹幕数据进行正常解析,进而避免了因弹幕数据异常而导致客户端出现系统崩溃等问题,提高了弹幕测试效率。

实施例二

图2为本发明实施例二提供的一种基于链表方式的弹幕校验方法的流程图,本实施例在上述实施例的基础上,在预设字符串嵌套结构还包含第一预设标识符,第二预设标识符以及由预设数量的预设字符串结构形成的至少一层嵌套时,对目标弹幕数据的校验过程进行了详细描述。在此基础上,还对“对第一字符链表中的各节点进行遍历,删除第一字符链表中的各预设开始符及各预设结束符对应的节点,获得第二字符链表”进行了优化,其中与上述各实施例相同或相应的术语的解释在此不再赘述。

参见图2,本实施例提供的基于链表方式的弹幕校验方法包括以下步骤:

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

其中,预设字符串嵌套结构除了包含预设开始符和预设结束符之外,还包含第一预设标识符,第二预设标识符,以及由预设数量的预设字符串结构形成的至少一层嵌套。其中,预设字符串结构为:以预设开始符作为首位字符,以第一预设标识符划分各键值对信息,以第二预设标识符连接键值对信息中的键信息和值信息,以预设结束符作为末位字符。示例性地,第一预设标识符可以是但不限于单斜杠“\”、“/”、双斜杠“\\”和“//”;第二预设标识符可以是但不限于“-”、“@”、“,”“==”和“@=”。在本实施例中,根据预设弹幕协议的规定,每个键值对信息中的键信息和值信息均不会包含与第一预设标识符相同的字符串,而每个键值对信息中的值信息可以不包含与第二预设标识符相同的字符串,也可以包含与第二预设标识符相同的字符串。本实施例中的预设字符串嵌套结构的规定方式可以更加便于数据传输。

预设字符串嵌套结构中预设数量的预设字符串结构可以仅形成一层嵌套,即该层嵌套由预设数量的预设字符串结构形成;也可以形成多层嵌套,即所有层嵌套由预设数量的预设字符串结构形成,具体的嵌套结构可以根据预设弹幕协议确定。由预设数量的预设字符串结构形成的至少一层嵌套可以包括多种嵌套方式。

具体地,本实施例可以将每个预设字符串结构视为一个键值对信息,并以第一预设标识符划分预设字符串结构和其它键值对信息,然后并列嵌套至预设字符串嵌套结构中,从而形成一层嵌套。示例性地,当预设数量为2时且形成一层嵌套时,预设字符串嵌套结构的目标弹幕数据可以为:{type@=uenter/{rid@=104838/}/uid@=20088/{wgei@=0/}/avater@=www@douyu@=tv@com/},其中,以“/”为第一预设标识符,以“@=”为第二预设标识符,弹幕数据包括两个预设字符串结构的数据,分别为{rid@=104838}和{wgei@=0/}。

本实施例也可以先将每个预设字符串结构进行彼此嵌套,然后将嵌套后的数据视为键值对信息,再嵌套至预设字符串嵌套结构中,从而形成多层嵌套。示例性地,当预设数量为2且形成二层嵌套时,预设字符串嵌套结构的目标弹幕数据为:{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/}嵌套至预设字符串嵌套结构中,从而形成第二层嵌套。

本实施例中的嵌套方式还可以是将一部分的预设字符串结构进行并列嵌套,另一部分的预设字符串结构进行彼此嵌套,其具体的嵌套方式可以根据预设弹幕协议进行确定。本实施例对预设字符串嵌套结构中的嵌套方式不做具体限定。

s220、调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数,将目标弹幕数据转换为第一字符数组,并对第一字符数组中的字符元素进行遍历,确定目标弹幕数据中的预设开始符数量和预设结束符数量。

s230、若预设开始符数量等于预设结束符数量,则将第一字符数组转换为第一字符链表。

其中,第一字符链表为:头节点中的节点数据为空,头节点中的节点指针指向第一个节点,第一个节点中的节点数据为第一字符数组中的第一个字符元素,第一个节点中的节点指针指向第二个节点,第二个节点中的节点数据为第一字符数组中的第二个字符元素,第二个节点中的节点指针指向第三个节点,依次类推。

具体地,在预设开始符数量等于预设结束符数量时,表明目标弹幕数据中的预设开始符和预设结束符一一对应,此时可以将第一字符数组转换为第一字符链表。

s240、将第一字符链表作为当前第一字符链表,第一字符链表中的头节点作为当前节点,以及头节点中的节点指针作为当前指针。

其中,当前第一字符链表是指当前时刻对应的第一字符链表。当前节点是指当前时刻对应的第一字符链表中的一个节点。当前指针是指当前节点中的节点指针。

具体地,本实施例可以对第一字符链表中的各个节点进行循环遍历,并在第一次循环周期内,当前第一字符链表为由第一字符数组转换的第一字符链表,当前节点为第一字符链表中的头节点,当前指针为头节点中的节点指针。

s250、检测当前指针指向的下一节点中的节点数据是否为预设开始符或者预设结束符,若是,则进入步骤s260,若否,则进入步骤s270。

具体地,若当前节点为p,当前指针为p->next,预设开始符为“{”,预设结束符为“}”,则可以通过调用p->next->data==“{”||p->next->data==“}”来检测当前指针指向的下一节点中的节点数据是否为预设开始符或者预设结束符,若下一节点中的节点数据为预设开始符或者预设结束符,则执行步骤s260的操作;若下一节点中的节点数据不是预设开始符,也不是预设结束符,则执行步骤s270的操作。

s260、将当前指针指向下一节点中的节点指针所指向的节点,以更新当前第一字符链表,并进入步骤s280。

具体地,当下一节点中的节点数据为预设开始符或者预设结束符时,可以通过调用p->next=(p+1)->next,将当前指针p->next指向下一节点p+1中的节点指针(p+1)->next所指向的节点,从而可以删除当前节点的下一节点,以更新当前第一字符链表。示例性地,若当前第一字符链表中有三个节点a、b和c,其中,节点a为当前节点,节点a中的节点指针(即当前指针)指向节点b,节点b中的节点数据为预设开始符,节点b中的节点指针指向节点c,则在检测到当前指针指向的节点b中的节点数据为预设开始符时,通过将当前指针指向节点b中的节点指针所指向的节点,也就是将节点a中的节点指针指向节点c,从而可以删除当前第一字符链表中的节点b,并更新当前第一字符链表,此时更新后的当前第一字符链表包括两个节点a和c,并且节点a中的节点指针指向节点c。

s270、将下一节点中的节点指针作为当前指针,以更新当前指针,并将下一节点作为当前节点,以更新当前节点。

具体地,当下一节点中的节点数据均不是预设开始符和预设结束符时,表明当前节点的下一节点无需进行删除,此时可以将下一节点作为当前节点,将下一节点中的节点指针作为当前指针,从而更新当前指针和当前节点。示例性地,若当前第一字符链表中有三个节点a、b和c,其中,节点a为当前节点,节点a中的节点指针(即当前指针)指向节点b,节点b中的节点数据既不是预设开始符也不是预设结束符,节点b中的节点指针指向节点c,则在检测到当前指针指向的节点b中的节点数据均不是预设开始符和预设结束符时,将当前节点a的下一节点b作为当前节点,下一节点b中的节点指针作为当前指针,以便进行下一循环周期的校验操作。

s280、检测当前节点是否是当前第一字符链表中的最后一个节点,若是,则进入步骤s290,若否,则进入步骤s250。

具体地,本实施例在每次循环中校验的均是下一节点中的节点数据是否为预设开始符或者预设结束符,从而通过检测当前节点是否为当前第一字符链表中的最后一个节点,来确定循环遍历是否结束。若当前节点是当前第一字符链表中的最后一个节点,则表明循环遍历结束,此时确定的当前第一字符链表为最终的第一字符链表。若当前节点不是当前第一字符链表中的最后一个节点,则表明循环遍历还未结束,此时通过重复执行步骤s250来进入下一个循环周期。

s290、将当前第一字符链表确定为第二字符链表。

具体地,在当前节点是当前第一字符链表中的最后一个节点时,表明当前第一链表中的每个节点数据均不是预设开始符和预设结束书,此时可以直接将当前第一字符链表确定为第二字符链表,从而基于链表结构的字符去除方式,快速地去除了所有的预设开始符和预设结束符,进而获得了第二字符链表。

s291、将第二字符链表转换为第二字符数组,并将第二字符数组转换为待测字符串,作为待测弹幕数据。

s292、调用存储待测弹幕数据的待测数据对象中的字符串分割函数,将待测弹幕数据以第一预设标识符进行分割,确定字符串数组。

具体地,本实施例可以以第一预设标识符作为字符串分割函数的输入参数,调用字符串分割函数,将待测数据对象中的待测弹幕数据以第一预设标识符进行分割,并将分割后获得的多个字符串数据构成字符串数组。

示例性地,若待测数据对象danmustr2中存储的待测弹幕数据为:type@=uenter/rid@=104838/uid@=20088//wgei@=0//avater@=www@douyu@=tv@com/,第一预设标识符为“/”,则通过调用splitsrtarray=danmustr2.split(“/”),将目标弹幕数据以“/”进行分割获得的字符串数据存储至字符串数组splitsrtarray中,即splitsrtarray中的字符串元素分别为:“type@=uenter”、“rid@=104838”、“uid@=20088”、“”、“wgei@=0”、“”、和“avater@=www@douyu@=tv@com”。需要注意的是,分割出的尾部的空字符串不能作为字符串数组中的一个数组元素,而中间的空字符串可以作为字符串数组中的一个数组元素。

需要注意的是,由于待测弹幕数据中的弹幕参数信息中均不包含与第一预设标识符相同的字符串,从而在以第一预设标识符对待测弹幕数据进行分割时,不会对弹幕参数内容进行分割,避免造成误分割的情况,以便可以利用分割方式准确计算待测弹幕数据中的第一预设标识符数量。

s293、根据字符串数组的数组长度,确定待测弹幕数据中的第一预设标识符数量。

其中,数组长度是指字符串数组中的元素个数。本实施例可以根据字符串数组的长度属性,直接获取字符串数组的数组长度,即分割后的字符串数据的个数。示例性地,通过调用splitsrtarray.length,可以获得字符串数组splitsrtarray的数组长度。对于准确完整的待测弹幕数据而言,待测弹幕数据中的首位字符不会是第一预设标识符,而末位字符是第一预设标识符,从而分割后的字符串数据的数量等于第一预设标识符数量,因此可以直接将字符串数组的数组长度确定为第一预设标识符数量。

s294、将字符串数组中的每个字符串元素存储至对应的字符串对象中,并调用各字符串对象中的标识符查找函数,确定待测弹幕数据中的第二预设标识符数量。

其中,标识符查找函数是预先定义的,用于查找拼接字符串对象存储的字符串数据中是否包含输入参数的函数。需要注意的是,标识符查找函数只能用于确定字符串数据中是否包含输入参数,无法确定字符串数据中包含的输入参数的个数,从而弹幕参数信息中无论是否包含与第二预设标识符相同的字符串,均可以利用标识符查找函数准确地确定待测弹幕数据中第二预设标识符数量。

具体地,将字符串数组中的每个字符串元素存储至对应的字符串对象中,即字符串元素与字符串对象一一对应,通过以第二预设标识符作为函数输入参数,调用每个字符串对象中的标识符查找函数,检测每个字符串对象存储的字符串元素是否包含第二预设标识符,从而统计待测弹幕数据中的第二预设标识符数量。示例性地,假设第二预设标识符为“@=”,则可以通过以“@=”为函数输入对象,逐个调用字符串元素对应的字符串对象tmpstr中的标识符查找函数tmpstr.contains(“@=”),逐个查询每个字符串元素中是否包含“@=”,若是,则预设的标识符数量变量splitcount的变量值累加1。在对所有字符串元素遍历结束后,可以将标识符数量变量中存储的变量值直接确定为待测弹幕数据中的第二预设标识符数量。

需要注意的是,对于字符串元素为“avater@=www@douyu@=tv@com”而言,第二预设标识符的数量应该为1,而不是2,若利用与第二预设标识符进行字符匹配的方式,则无法准确地确定第二预设标识符的数量,从而本实施例通过调用标识符查找函数,只要当前字符串元素包含第二预设标识符,标识符数量变量的变量值便累加1,从而可以更加准确地确定待测弹幕数据中的第二预设标识符数量。

s295、确定第一预设标识符数量与第二预设标识符数量的差值。

具体地,将第一预设标识符数量减去第二预设标识符数量,得到两者的差值,以进行后续校验操作。

s296、若差值等于预设数量,则确定目标弹幕数据校验成功。

其中,通过对完整的预设字符串嵌套结构进行分析,可以看出:预设字符串嵌套结构中每嵌套一个预设字符串结构,则弹幕数据中便增加一个第一预设标识符以进行划分,而第二预报标识符的数量保持不变。示例性地,若预设字符串嵌套结构包括由m个预设字符串结构组成的嵌套结构,则对于完整的弹幕数据而言,第一预设标识符数量比第二预报标识符数量多m个。

具体地,若第一预设标识符数量与第二预设标识符数量的差值等于预设数量,则表示目标弹幕数据完整,此时可以确定目标弹幕数据校验成功,否则确定目标弹幕数据校验失败。

本实施例的技术方案,在预设字符串嵌套结构包括两个预设标识符以及由预设数量的第一预设字符串结构形成的至少一层嵌套时,预设字符串嵌套结构的目标弹幕数据在字符验证成功后,根据字符串数组的数组长度确定第一预设标识符数量;根据字符串数组中的每个字符串元素可以更加准确地确定第二预设标识符数量,并且通过第一预设标识符数量与第二预设标识符数量的差值与预设数量是否相等,来确定目标弹幕数据的校验结果,从而对包括两个预设标识符的预设字符串嵌套结构的目标弹幕数据进行了完整性校验,以保证弹幕数据的正常解析。此外,基于循环遍历的方式,对第一字符链表中的各节点进行了遍历,可以更加便捷地获得第二字符链表,进而提高了校验效率。

在上述技术方案的基础上,在s220之前,还包括:调用弹幕数据对象中的第一字符验证函数,检测目标弹幕数据中的首位字符是否为预设开始符;若首位字符为预设开始符,则调用弹幕数据对象中的第二字符验证函数,检测目标弹幕数据中的末位字符是否为预设结束符;相应地,s220包括:若末位字符为预设结束符,则调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数。

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

具体地,当调用第一字符验证函数后,若检测目标弹幕数据中的首位字符不是预设开始符,则表明首位字符验证失败,也就是目标弹幕数据是一条不完整的数据,即不合格数据,此时可以直接确定目标弹幕数据校验失败。若检测目标弹幕数据中的首位字符是预设开始符,则表明首位字符验证成功,此时可以调用第二字符验证函数,检测目标弹幕数据中的末位字符是否为预设结束符,若否,则表明目标弹幕数据是一条不完整的数据,此时可以直接确定目标弹幕数据校验失败;若是,则表明末位字符验证成功,即目标弹幕数据中的首位字符和末位字符均是合法的,此时可以调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数,以便继续执行后续校验操作。

本实施例在调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数之前,可以通过调用弹幕数据对象中的第一字符验证函数和第二字符验证函数,分别对目标弹幕数据中的首位字符和末位字符进行字符验证,在首位字符验证失败或者末位字符验证失败时,可以直接确定目标弹幕数据校验失败;在首位字符和末位字符均验证成功后,再进行后续地校验操作,从而提高了目标弹幕数据校验的严格性,使得目标弹幕数据更具完整性。

实施例三

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

其中,目标弹幕数据获取模块310,用于获取预设字符串嵌套结构的目标弹幕数据,其中,预设字符串嵌套结构包含至少两个预设开始符和至少两个预设结束符;字符数量确定模块320,用于调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数,将目标弹幕数据转换为第一字符数组,并对第一字符数组中的字符元素进行遍历,确定目标弹幕数据中的预设开始符数量和预设结束符数量;待测弹幕数据确定模块330,用于若预设开始符数量等于预设结束符数量,则基于链表结构的字符去除方式,去除第一字符数组中的各预设开始符和各预设结束符,获得待测弹幕数据;目标弹幕数据校验模块340,调用存储待测弹幕数据的待测弹幕对象中的标识符确定函数,确定待测弹幕数据中的预设标识符数量,并在预设标识符数量满足预设校验条件时,确定目标弹幕数据校验成功。

可选地,待测弹幕数据确定模块330,包括:

第一字符链表确定单元,用于将第一字符数组转换为第一字符链表;

第二字符链表确定单元,用于对第一字符链表中的各节点进行遍历,删除第一字符链表中的各预设开始符及各预设结束符对应的节点,获得第二字符链表;

待测弹幕数据确定单元,用于将第二字符链表转换为第二字符数组,并将第二字符数组转换为待测字符串,作为待测弹幕数据。

可选地,第二字符链表确定单元,具体用于:将第一字符链表作为当前第一字符链表,第一字符链表中的头节点作为当前节点,以及头节点中的节点指针作为当前指针;检测当前指针指向的下一节点中的节点数据是否为预设开始符或者预设结束符;若是,则将当前指针指向下一节点中的节点指针所指向的节点,以更新当前第一字符链表;若否,则将下一节点中的节点指针作为当前指针,以更新当前指针,并将下一节点作为当前节点,以更新当前节点;若当前节点是当前第一字符链表中的最后一个节点,则将当前第一字符链表确定为第二字符链表;若当前节点不是当前第一字符链表中的最后一个节点,则返回执行检测当前指针指向的下一节点中的节点数据是否为预设开始符或者预设结束符的操作。

可选地,预设字符串嵌套结构还包含:第一预设标识符,第二预设标识符,以及由预设数量的预设字符串结构形成的至少一层嵌套;其中,预设字符串结构为:以预设开始符作为首位字符,以第一预设标识符划分各键值对信息,以第二预设标识符连接键值对信息中的键信息和值信息,以预设结束符作为末位字符。

可选地,目标弹幕数据校验模块340还包括:标识符确定函数执行单元,用于通过如下步骤实现确定待测弹幕数据中的预设标识符数量的功能:

调用存储待测弹幕数据的待测数据对象中的字符串分割函数,将待测弹幕数据以第一预设标识符进行分割,确定字符串数组;根据字符串数组的数组长度,确定待测弹幕数据中的第一预设标识符数量;将字符串数组中的每个字符串元素存储至对应的字符串对象中,并调用各字符串对象中的标识符查找函数,确定待测弹幕数据中的第二预设标识符数量。

可选地,目标弹幕数据校验模块340还包括:

差值确定单元,用于确定第一预设标识符数量与第二预设标识符数量的差值;

目标弹幕数据校验单元,用于若差值等于预设数量,则确定目标弹幕数据校验成功。

可选地,该装置还包括:

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

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

相应地,字符数量确定模块320,还用于:若末位字符为预设结束符,则调用存储目标弹幕数据的弹幕数据对象中的字符串转换函数。

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

实施例四

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

一个或多个处理器410;

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

当一个或多个程序被一个或多个处理器410执行,使得一个或多个处理器410实现如上述实施例中任意实施例提出的基于链表方式的弹幕校验方法。

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

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

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

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

实施例五

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

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

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

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