一种数据写入的方法、装置及设备与流程

文档序号:15492490发布日期:2018-09-21 20:54阅读:125来源:国知局

本发明属于计算机技术领域,尤其涉及一种数据写入的方法、装置及设备。



背景技术:

随着互联网技术的发展,一种在网络中使用流式传输技术的连续时基媒体-流媒体应用而生,常见的流媒体有音频、视频或多媒体文件。流服务可以给用户提供持续不断的音/视频流,满足用户无需下载即可实现在线观看动态影音的需求,因此,流媒体技术在媒体点播领域和媒体直播领域得到了极大的应用。

但是,现有的流媒体转发模块会预先为每个网络链路预分配足够一帧的帧长度的内存用于数据的接收和发送,如果有多个网络链路,那将会占用大量的内存资源,造成内存资源的浪费,增大内存负担。例如,一个网络链路分配的内存大小为2m,而发送的数据的大小为0.1m,如果有10个网络链路,那么将分配20m的内存,而实际使用的内存却只有2m。



技术实现要素:

有鉴于此,本发明实施例提供了一种数据写入的方法、装置及设备,以解决现有技术中的流媒体网络的内存分配方式导致的内存占用大、内存资源浪费的问题。

本发明实施例的第一方面提供了一种数据写入的方法,包括:获取当前写入数据,并确定所述当前写入数据对应的来源标记;基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据;将所述当前写入数据的当前数据信息写入数据节点列表,所述当前数据信息包括所述当前写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述当前数据信息对应一个数据节点序号;根据所述来源标记确定与所述当前写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述当前数据信息对应的数据节点序号,写入所述数据节点序号列表。

本发明实施例的第二方面提供了一种数据写入的装置,包括:获取模块,用于获取当前写入数据,并确定所述当前写入数据对应的来源标记;覆盖模块,用于基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据;写入模块,用于将所述当前写入数据的当前数据信息写入数据节点列表,所述当前数据信息包括所述当前写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述当前数据信息对应一个数据节点序号;根据所述来源标记确定与所述当前写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述当前数据信息对应的数据节点序号,写入所述数据节点序号列表。

本发明实施例的第三方面提供了一种数据写入的设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上第一方面所述的方法的步骤。

本发明实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如上所述方法的步骤。

本发明实施例与现有技术相比存在的有益效果是:

本发明实施例首先获取当前写入数据,并确定所述当前写入数据对应的来源标记,然后基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据,由于将不同来源的数据都写入一个固定大小的环形缓冲区,且当该环形缓冲区的存储空间不够的时候,通过覆盖环形缓冲区中一个或多个历史写入数据来存储当前写入数据,由此使得环形缓冲区不仅可以循环存储不同的写入数据,并且能够基于当前写入数据的数据长度进行存储空间的分配,而不是为每一个写入数据分配固定大小的存储空间,大大的提高了存储空间的利用率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1示出了本发明实施例提供的一种数据写入的方法的实现流程示意图;

图2示出了本发明实施例提供的环形缓冲区的示意图;

图3示出了本发明实施例提供的环形缓冲区的示意图;

图4示出了本发明实施例提供的步骤s12的实现流程示意图;

图5示出了本发明实施例提供的环形缓冲区的示意图;

图6示出了本发明实施例提供的环形缓冲区的示意图;

图7示出了本发明实施例提供的步骤s122的实现流程示意图;

图8示出了本发明实施例提供的环形缓冲区的示意图;

图9示出了本发明实施例提供的环形缓冲区的示意图;

图10示出了本发明实施例提供的环形缓冲区的示意图;

图11示出了本发明实施例提供的环形缓冲区的示意图;

图12示出了本发明实施例提供的数据节点列表的示意图;

图13示出了本发明实施例提供的数据节点序号列表的示意图;

图14示出了本发明实施例提供的环形缓冲区的示意图;

图15示出了本发明实施例提供的一种数据读取的方法的实现流程示意图;

图16示出了本发明实施例提供的一种数据写入的装置的结构示意图;

图17示出了本发明实施例提供的一种数据写入的设备的示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解的是,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例一

图1示出了本发明实施例提供的数据写入的方法的实现流程。本实施例中的数据写入的方法的执行主体为具有实现本发明实施例所述的数据写入的方法的设备,该设备包括但不限于流媒体转发设备,还可以包括能够实现数据写入功能的移动终端、服务器等。

下面主要以码流中的帧数据的写入为例来详细讲述本发明实施例:

s11、获取当前写入数据,并确定所述当前写入数据对应的来源标记。

在本发明实施例中,写入数据的来源包括但不限于码流数据,写入数据的来源还可以是音频数据。当写入数据的来源是码流的时候,来源标记为码流标记,写入数据为帧数据。来源标记可以是数字和/或字母。

码流是指视频文件在单位时间内使用的数据流量,也叫码率,是视频编码中画面质量控制中最重要的部分。同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越好。

由上述码流定义部分的内容可知,一个码流可能包含多帧帧数据,而本发明实施例提供的方法需要在一个环形缓冲区中存储不同码流对应的帧数据(即写入数据),如果在获取到当前帧数据的时候不对当前帧数据对应的码流进行确认,那么后续在读取该当前帧数据的时候,将无法得知从环形缓冲区的哪个位置开始读取当前帧数据,或者读取的是哪个码流的帧数据,进而影响后续对读取的帧数据的进一步处理。

s12、基于所述当前写入数据的数据长度,覆盖环形缓冲区中一个或多个历史写入数据以存储所述当前写入数据。

在实施步骤s12之前,设置所述环形缓冲区。

本发明实施例中的码流可以预先发送到流媒体转发设备,然后再由流媒体转发设备转发给客户端,因此,在流媒体转发设备中预先设置所述环形缓冲区。

其中,流媒体转发设备是流媒体应用系统的核心器件,是向用户提供视频服务的关键平台。例如,当有多个用户并发访问同一个视频源时,流媒体转发设备与视频编码设备建立单路连接,将图像分发给请求服务的设备,保障系统正常运行,支持大量用户网络访问,共享监控信息资源。流媒体应用系统的主要性能取决于流媒体转发设备的性能和服务质量。

在本发明实施例中,环形缓冲区是一大块连续的内存区域,用于存放写入数据。其中,内存又称主存,是中央处理器(centralprocessingunit,cpu)能直接寻址的存储空间,由半导体器件制成。内存的特点是存取速率快。平常使用的程序,如电脑操作系统、打字软件、游戏软件等,都只有把它们调入内存中才能运行。通常我们把要永久保存的、大量的数据存储在外存上,而把一些临时的或少量的数据和程序放在内存上。在初始化环形缓冲区的时候,环形缓冲区中内容为空,里面不包含任何写入数据,如图2所示。

图3为存储有写入数据的环形缓冲区的示意图,示例性的,在图3所示的2m大小的环形缓冲区中存储了5个写入数据,剩余638k的空间没有存储写入数据,进一步的,若写入数据按照从左到右的顺序存入所述环形缓冲区,那么,写入数据1将是最先存入环形缓冲区的。如图3所示,偏移量是指写入数据存储的起始位置相对于环形缓冲区的起始位置偏移的大小,写入数据1存储的起始位置与环形缓冲区的起始位置重叠,故写入数据1的偏移量为0,由写入数据1的偏移量加上写入数据1的数据长度100k,可以得到写入数据2的偏移量:100k,同时,在需要读取写入数据1的时候,可以根据写入数据1的偏移量及写入数据1的数据长度完成写入数据1的读取。

可选的,环形缓冲区的大小基于网络输入带宽的大小进行确定。

例如,假设现有20路码流的数据需要发送,每路码流大小为4m,则输入带宽为每秒80m,此时,可将环形缓冲区的大小设置为20m,以用于发送20路码流的帧数据。

根据网络输入带宽的大小确定环形缓冲区的大小,可以更加合理的分配大小合适的环形缓冲区,以免造成存储空间的浪费。

如图4所示,步骤s12的详细实施过程包括:

s121、将所述当前写入数据的数据长度按从左到右的顺序依次与环形缓冲区中的每一个剩余环形缓冲子区的长度进行比较。

通过将当前写入数据的数据长度与每一个剩余环形缓冲子区的长度进行比较,判断是否能将当前写入数据直接存入所述环形缓冲区中的某一个剩余环形缓冲子区。

在本发明实施例中,剩余环形缓冲子区为环形缓冲区中未存放写入数据的区域,且紧邻该剩余环形缓冲子区的左边必定存储有写入数据,如图5所示的剩余环形缓冲子区1和2。具体地,首先将当前写入数据的数据长度与剩余环形缓冲子区1进行比较,然后再将当前写入数据的数据长度与剩余环形缓冲子区2进行比较,以进行从左到右的判断。

s122、若当前写入数据的数据长度大于所述环形缓冲区中的每一个剩余环形缓冲子区的长度,则覆盖所述环形缓冲区中一个或多个历史写入数据以存储所述当前写入数据。

由于当前写入数据的数据长度已经大于环形缓冲区中的每一个剩余环形缓冲子区的长度,此时,为了保证数据的完整性,不会将当前写入数据拆成几个部分,然后分别存放至各个剩余环形缓冲子区中,而是选择覆盖环形缓冲区中一个或多个历史写入数据以完整的存储所述当前写入数据。

例如,假设当前写入数据10的数据长度为500k,那么如图5所示,剩余环形缓冲子区1和剩余环形缓冲子区2的长度均小于500k,此时为了保存存储写入数据的完整性,不能将当前写入数据10拆成两个部分存储,从而得到如图6所示的结果。

具体地,如图7所示,步骤s122中的覆盖所述环形缓冲区中一个或多个历史写入数据以存储所述当前写入数据,包括:

s1221、累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,直至所述累积数据长度大于或等于所述当前写入数据的数据长度。

s1222、利用所述当前写入数据覆盖所述累积数据长度包括的所述历史写入数据。

例如,假设当前写入数据6的数据长度为650k,那么如图3所示,剩余环形缓冲子区1的长度小于650k,此时,累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,可以看出,最先存储的历史写入数据为写入数据1,其次为写入数据2、3、4、5,那么由于写入数据1、2、3、4的累积长度已经大于当前写入数据6的数据长度650,且没有剩余环形缓冲子区与写入数据1、2、3、4紧邻,此时,直接利用所述当前写入数据6覆盖所述累积数据长度包括的所述历史写入数据1、2、3、4,得到如图8所示的覆盖后的结果。

进一步的,由于在经过覆盖之后,还会产生新的剩余环形缓冲子区,如图8中的剩余环形缓冲子区2,则当下一写入数据来到的时候,执行:

累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,直至所述累积数据长度和与所述最先存储的至少一个历史写入数据左边紧邻的当前剩余环形缓冲子区的长度之和大于或等于所述下一写入数据的数据长度;

利用所述下一写入数据覆盖所述累积数据长度包括的所述历史写入数据和所述当前剩余环形缓冲子区。

例如,如图5所示,假设当前写入数据为写入数据9,且该写入数据9已经完成了写入,并产生了新的剩余环形缓冲子区1。下一写入数据10的数据长度为500k,剩余环形缓冲子区1和剩余环形缓冲子区2的长度均小于500k,此时,累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,可以看出,最先存储的历史写入数据为写入数据5,其次为写入数据6,那么通过将写入数据5和剩余环形缓冲子区1的长度求和可以发现,写入数据5和剩余环形缓冲子区1的长度和838k已经大于当前写入数据10的数据长度500k,此时利用所述当前写入数据10覆盖所述累积数据长度包括的所述历史写入数据和所述剩余环形缓冲子区1,得到如图9所示的覆盖后的结果。

通过上述操作,可以使得每一个剩余环形缓冲子区都得到很好的利用,保证了环形缓冲区具有较高的资源利用率。

s123、在当前写入数据的数据长度第一次小于某一个剩余环形缓冲子区时,将当前写入数据直接存入该剩余环形缓冲子区。

如图3所示,假设当前写入数据6的数据长度为500k,且唯一的剩余环形缓冲子区1的长度大于当前写入数据6的数据长度,因此,直接将当前写入数据6存入该剩余环形缓冲子区1,得到如图10所示结果。

再如图5所示,假设当前写入数据10的数据长度为200k,有两个剩余环形缓冲子区,由步骤s121可知是按从左到右的顺序进行的比较,将当前写入数据的数据长度第一次小于的剩余环形缓冲子区设置为当前写入数据即将写入的剩余环形缓冲子区:剩余环形缓冲子区1,因此,直接将当前写入数据存入该剩余环形缓冲子区1,得到如图11所示结果。

在步骤s12覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据之后,还包括:删除所述一个或多个历史写入数据在所述数据节点列表中的数据信息;删除所述一个或多个历史写入数据在所述数据节点序号列表中的数据节点序号。

一个或多个历史写入数据由于已经被覆盖,此时,为了减少数据节点列表及数据节点序号列表的存储量,选择将该一个或多个历史写入数据在所述数据节点列表中的数据信息和在数据节点序号列表中的数据节点序号进行删除。

s13、将所述当前写入数据的当前数据信息写入数据节点列表,根据所述来源标记确定与所述当前写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述当前数据信息对应的数据节点序号,写入所述数据节点序号列表。

在本发明实施例中,所述当前数据信息包括所述当前写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述当前数据信息对应一个数据节点序号。

数据节点列表用于存储不同来源标记的来源的不同写入数据的数据信息,包括多个数据节点,每个数据节点存储一个写入数据的数据信息,如图12所示,该数据节点列表包括1000个节点,其中,节点1至4存储有写入数据1至4的数据信息,节点1000未存有数据信息。每一个写入数据的数据信息可以按顺序依次写入每一个节点,也可以随机写入一个节点。在这里,若来源为码流,则来源标记为码流标记,写入数据为帧数据,用码流标记标记不同的码流。

每一个数据节点序号列表用于存储一个来源的写入数据在数据节点列表中的数据节点序号,包括多个节点,每个节点存储一个数据节点序号,如图13所示,来源2对应的数据节点序号列表存储了两个数据节点序号,其中,节点1和节点2存储的数据节点序号因为被覆盖而被删除。

在本发明实施例中,为不同来源标记的来源(比如码流)分配一个数据节点序号列表,例如,为来源1分配数据节点序号列表1;为来源2分配数据节点序号列表2。

假设m为来源1的数据节点序号列表的总的节点数,来源1写入环形缓冲区的写入数据的总数量为n,且n<=(m-1),那么确定当前写入数据的数据节点序号在数据节点序号列表中存储的数据序号(即节点号)为n+1,并将当前数据信息写入数据节点序号列表中的节点n+1;若n>(m-1),那么确定当前写入数据的数据节点序号在数据节点序号列表中存储的数据序号为n-m+1,并将当前数据信息写入数据节点序号列表中的节点n-m+1。

在步骤s13将与所述当前数据信息对应的数据节点序号,写入所述节点序号列表之后,还包括:

获取下一写入数据,并确定所述下一写入数据对应的码流;

相应地,步骤s12中基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据,包括:

在下一写入数据的数据长度小于所述累积数据长度与所述当前写入数据的数据长度之差时,基于所述下一写入数据的数据长度、所述当前写入数据的数据长度、所述当前写入数据在所述环形缓冲区中的偏移量和所述累积数据长度,将所述下一写入数据写入所述环形缓冲区;

相应的,步骤s13包括:将所述下一写入数据的下一数据信息写入数据节点列表,所述下一数据信息包括所述下一写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述下一数据信息对应一个数据节点序号;根据所述来源标记确定与所述下一写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述下一数据信息对应的数据节点序号,写入所述数据节点序号列表。

例如,如图9所示,图9是图5经过覆盖后的结果,获取下一写入数据11,假设下一写入数据11的大小为100k,那么下一写入数据11的数据长度小于累积数据长度与当前写入数据(写入数据10)的数据长度之差,因此,直接将下一写入数据11存入由当前写入数据的数据长度、所述当前写入数据在所述环形缓冲区中的偏移量和所述累积数据长度确定的位置,如图14所示。

上述方案,首先获取当前写入数据,并确定所述当前写入数据对应的来源标记,然后基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据,由于将不同来源的数据都写入一个固定大小的环形缓冲区,且当该环形缓冲区的存储空间不够的时候,通过覆盖环形缓冲区中一个或多个历史写入数据来存储当前写入数据,由此使得环形缓冲区不仅可以循环存储不同的写入数据,并且能够基于当前写入数据的数据长度进行存储空间的分配,而不是为每一个写入数据分配固定大小的存储空间,大大的提高了存储空间的利用率。

实施例二

参照图15,图15是本发明另一实施例提供的数据读取的方法的实现流程示意图。本实施例中的数据读取的方法的执行主体为具有实现本发明实施例所述的数据读取的方法的设备,该设备包括但不限于移动终端、服务器。具体如下:

s21、基于需要读取的当前写入数据对应的来源标记,确定与所述当前写入数据对应的数据节点序号列表;

s22、基于所述当前写入数据的数据序号,从所述数据节点序号列表中获取所述当前写入数据的数据节点序号;基于所述数据节点序号,在数据节点列表中,确定所述当前写入数据的数据长度和所述当前写入数据在环形缓冲区中的偏移量;

s23、基于所述数据长度和所述偏移量,从所述环形缓冲区中读取所述当前写入数据。

需要说明的是,本发明实施例二提出的数据读取的方法是与本发明方法实施例一提出的数据写入的方法相对应的数据读取的方案,两个方法实施例中的相应技术内容可互相适用,此处不再详述。

上述方案,在读取写入数据的时候,首先根据来源标记找到对应的数据节点序号列表,然后基于数据序号,从数据节点序号列表中找到数据节点序号,再基于数据节点序号,找到当前写入数据的数据信息,然后基于找到的数据信息,从环形缓冲区中读取出数据。

实施例三

图16示出了本发明实施例提供的数据写入的装置100,包括:

获取模块110,用于获取当前写入数据,并确定所述当前写入数据对应的来源标记;

覆盖模块120,用于基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据;

写入模块130,用于将所述当前写入数据的当前数据信息写入数据节点列表,所述当前数据信息包括所述当前写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述当前数据信息对应一个数据节点序号;根据所述来源标记确定与所述当前写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述当前数据信息对应的数据节点序号,写入所述数据节点序号列表。

进一步的,所述装置100还包括:设置模块,用于设置所述环形缓冲区。

在本发明实施中,所述覆盖模块120包括:累计子模块,用于累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,直至所述累积数据长度大于或等于所述当前写入数据的数据长度;覆盖子模块,用于利用所述当前写入数据覆盖所述累积数据长度包括的所述历史写入数据。进一步的,所述装置100还包括:获取子模块,用于获取下一写入数据,并确定所述下一写入数据对应的来源标记;确定子模块,用于在下一写入数据的数据长度小于所述累积数据长度与所述当前写入数据的数据长度之差时,基于所述下一写入数据的数据长度、所述当前写入数据的数据长度、所述当前写入数据在所述环形缓冲区中的偏移量和所述累积数据长度,将所述下一写入数据写入所述环形缓冲区。

进一步的,所述装置100还包括:删除模块,用于删除所述一个或多个历史写入数据在所述数据节点列表中的数据信息;删除所述一个或多个历史写入数据在所述数据节点序号列表中的数据节点序号。

上述方案,首先获取当前写入数据,并确定所述当前写入数据对应的来源标记,然后基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据,由于将不同来源的数据都写入一个固定大小的环形缓冲区,且当该环形缓冲区的存储空间不够的时候,通过覆盖环形缓冲区中一个或多个历史写入数据来存储当前写入数据,由此使得环形缓冲区不仅可以循环存储不同的写入数据,并且能够基于当前写入数据的数据长度进行存储空间的分配,而不是为每一个写入数据分配固定大小的存储空间,大大的提高了存储空间的利用率。

需要说明的是,本发明实施例三提出的数据写入的装置与本发明方法实施例一提出的数据写入的方法基于相同的发明构思,装置实施例与方法实施例中的相应技术内容可互相适用,此处不再详述。

实施例四

图17是本发明再一实施例提供的一种数据写入的设备的示意图。如图17所示的本实施例中的数据写入的设备200可以包括:处理器210、存储器220以及存储在存储器220中并可在处理器210上运行的计算机程序230。处理器210执行计算机程序230时实现上述数据写入的方法实施例中的步骤。存储器220用于存储计算机程序,所述计算机程序包括程序指令。处理器210用于执行存储器220存储的程序指令。其中,处理器210被配置用于调用所述程序指令执行以下操作:

处理器210用于获取当前写入数据,并确定所述当前写入数据对应的来源标记。

处理器210还用于基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据。

处理器210还用于将所述当前写入数据的当前数据信息写入数据节点列表,所述当前数据信息包括所述当前写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述当前数据信息对应一个数据节点序号;根据所述来源标记确定与所述当前写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述当前数据信息对应的数据节点序号,写入所述数据节点序号列表。

进一步的,所述处理器210还用于设置所述环形缓冲区。

进一步的,所述处理器210还用于累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,直至所述累积数据长度大于或等于所述当前写入数据的数据长度;利用所述当前写入数据覆盖所述累积数据长度包括的所述历史写入数据。

进一步的,所述处理器210还用于获取下一写入数据,并确定所述下一写入数据对应的来源标记;在下一写入数据的数据长度小于所述累积数据长度与所述当前写入数据的数据长度之差时,基于所述下一写入数据的数据长度、所述当前写入数据的数据长度、所述当前写入数据在所述环形缓冲区中的偏移量和所述累积数据长度,将所述下一写入数据写入所述环形缓冲区。

进一步的,所述处理器210还用于删除所述一个或多个历史写入数据在所述数据节点列表中的数据信息;删除所述一个或多个历史写入数据在所述数据节点序号列表中的数据节点序号。

上述方案,首先获取当前写入数据,并确定所述当前写入数据对应的来源标记,然后基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据,由于将不同来源的数据都写入一个固定大小的环形缓冲区,且当该环形缓冲区的存储空间不够的时候,通过覆盖环形缓冲区中一个或多个历史写入数据来存储当前写入数据,由此使得环形缓冲区不仅可以循环存储不同的写入数据,并且能够基于当前写入数据的数据长度进行存储空间的分配,而不是为每一个写入数据分配固定大小的存储空间,大大的提高了存储空间的利用率。

应当理解,在本发明实施例中,所称处理器210可以是中央处理单元(centralprocessingunit,cpu),该处理器210还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

该存储器220可以包括只读存储器和随机存取存储器,并向处理器210提供指令和数据。存储器220的一部分还可以包括非易失性随机存取存储器。例如,存储器220还可以存储设备类型的信息。

需要说明的是,本发明实施例四提出的数据写入的设备与本发明方法实施例一提出的数据写入的方法基于相同的发明构思,设备实施例与方法实施例中的相应技术内容可互相适用,此处不再详述。

实施例五

在本发明的另一实施例中提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时实现:

获取当前写入数据,并确定所述当前写入数据对应的来源标记;

基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据;

将所述当前写入数据的当前数据信息写入数据节点列表,所述当前数据信息包括所述当前写入数据的数据长度和在所述环形缓冲区中的偏移量,所述数据节点列表包括多个数据节点序号,所述当前数据信息对应一个数据节点序号;根据所述来源标记确定与所述当前写入数据对应的数据节点序号列表,获取由所述来源标记确定的来源已写入所述环形缓冲区中的写入数据的总数量,基于所述总数量,确定所述数据节点序号在所述数据节点序号列表中存储的数据序号,基于所述数据序号,将与所述当前数据信息对应的数据节点序号,写入所述数据节点序号列表。

进一步的,所述计算机程序被处理器执行时还实现:

设置所述环形缓冲区。

具体地,所述计算机程序被处理器执行时还实现:

累计所述环形缓冲区中最先存储的至少一个历史写入数据的累积数据长度,直至所述累积数据长度大于或等于所述当前写入数据的数据长度;

利用所述当前写入数据覆盖所述累积数据长度包括的所述历史写入数据。

进一步的,所述计算机程序被处理器执行时还实现:

获取下一写入数据,并确定所述下一写入数据对应的来源标记;

在下一写入数据的数据长度小于所述累积数据长度与所述当前写入数据的数据长度之差时,基于所述下一写入数据的数据长度、所述当前写入数据的数据长度、所述当前写入数据在所述环形缓冲区中的偏移量和所述累积数据长度,将所述下一写入数据写入所述环形缓冲区。

进一步的,所述计算机程序被处理器执行时还实现:

删除所述一个或多个历史写入数据在所述数据节点列表中的数据信息;

删除所述一个或多个历史写入数据在所述数据节点序号列表中的数据节点序号。

上述方案,首先获取当前写入数据,并确定所述当前写入数据对应的来源标记,然后基于所述当前写入数据的数据长度,覆盖环形缓冲区中的一个或多个历史写入数据以存储所述当前写入数据,由于将不同来源的数据都写入一个固定大小的环形缓冲区,且当该环形缓冲区的存储空间不够的时候,通过覆盖环形缓冲区中一个或多个历史写入数据来存储当前写入数据,由此使得环形缓冲区不仅可以循环存储不同的写入数据,并且能够基于当前写入数据的数据长度进行存储空间的分配,而不是为每一个写入数据分配固定大小的存储空间,大大的提高了存储空间的利用率。

所述计算机程序被处理器执行时还可以用于实现:

基于需要读取的当前写入数据对应的来源标记,确定与所述当前写入数据对应的数据节点序号列表;

基于所述当前写入数据的数据序号,从所述数据节点序号列表中获取所述当前写入数据的数据节点序号;基于所述数据节点序号,在数据节点列表中,确定所述当前写入数据的数据长度和所述当前写入数据在环形缓冲区中的偏移量;

基于所述数据长度和所述偏移量,从所述环形缓冲区中读取所述当前写入数据。

所述计算机可读存储介质可以是前述任一实施例所述的设备的内部存储单元,例如设备的硬盘或内存。所述计算机可读存储介质也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述计算机可读存储介质还可以既包括所述设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序及所述设备所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、设备或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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