首页> 中国专利> 一种循环文件转循环线性文件方法及其访问操作方法

一种循环文件转循环线性文件方法及其访问操作方法

摘要

本发明适用于计算机领域,提供了一种循环文件转循环线性文件方法及其访问操作方法,所述方法包括如下步骤:判断循环文件的数据有效开始位置是否等于零;如果所述数据有效开始位置不等于零,则记录数据有效开始位置及循环文件的大小;将数据有效开始位置和循环文件的大小保存到该循环文件同一路径下,将所述循环文件设置为循环线性文件。在本发明实施例中,通过记录循环文件的数据存储结构,将循环文件转换为循环线性文件,然后通过相对应的线性方法访问操作该循环线性文件,从而有效的避免了因循环文件过大时,将循环文件转换为线性文件而带来的转换时间过长的问题,达到了循环文件快速转换成线性文件的目的。

著录项

  • 公开/公告号CN101324903A

    专利类型发明专利

  • 公开/公告日2008-12-17

    原文格式PDF

  • 申请/专利权人 深圳市同洲电子股份有限公司;

    申请/专利号CN200810142554.X

  • 发明设计人 罗金华;

    申请日2008-07-24

  • 分类号G06F17/30;

  • 代理机构深圳中一专利商标事务所;

  • 代理人张全文

  • 地址 518057 广东省深圳市南山区高新科技园北区彩虹科技大厦

  • 入库时间 2023-12-17 21:06:40

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-09-07

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20130213 终止日期:20150724 申请日:20080724

    专利权的终止

  • 2013-02-13

    授权

    授权

  • 2011-07-27

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20080724

    实质审查的生效

  • 2008-12-17

    公开

    公开

说明书

技术领域

本发明属于计算机领域,尤其涉及一种循环文件转循环线性文件方法及其访问操作方法。

背景技术

在计算机系统中,流文件被定义成一段程序或数据的集合,因此,从其用途来说,流文件也是一种存储历史数据的存储空间,通常在计算机存储中有两种常见形式的文件,即循环文件和线性文件。

循环文件:有固定大小,当文件大小达到上限时,新写入的数据覆盖文件中最早写入的数据,保持文件大小不变,以实现固定大小的文件可无限循环写入。

线性文件:没有大小上限,随着新数据的写入,文件大小线性增大。

循环文件是通过改变文件中数据的读写顺序来实现的,循环文件新数据写入时,如果写入位置到达了文件的结束位置,则跳至文件开头位置继续写入(也即循环文件写绕回),写绕回后的文件的数据组织方式变为非线性的,非线性文件的特点是最早写入文件的数据在写绕回后的文件中的位置并非文件的启始位置。在循环文件中,最先写入的数据在文件中的位置称为循环文件的数据有效开始位置(DataStartPos),例如,写绕回后,新写入的512Byte数据覆盖掉了文件启始位置的已有数据,则该循环的数据有效开始位置为512。

循环文件与线性文件的差异在于:线性文件是文件中的数据为线性的,即越先写入的数据在文件中的位置越小,越后写入的数据在文件中的位置越大;而循环文件写绕回后,文件内部的数据是非线性的,绕回后写入的数据在文件中开头位置

现有技术中,一般的循环文件转线性文件的方法是对文件的数据进行重组,将绕回后写入的数据移动到文件末尾,将文件中数据重组成线性的,但该方法的缺点很明显,如果循环文件很大,对循环文件的数据进行重组(即转换为线性文件)将耗时非常长。

发明内容

本发明实施例的目的在于提供一种循环文件转循环线性文件方法,旨在解决现有技术中将循环文件转换为线性文件时,如果循环文件比较大时数据重组非常耗时的问题。

本发明实施例是这样实现的,一种循环文件转循环线性文件方法,所述方法包括如下步骤:

判断循环文件的数据有效开始位置是否等于零;

如果所述数据有效开始位置不等于零,则记录数据有效开始位置及循环文件的大小;

将数据有效开始位置和循环文件的大小保存到该循环文件同一路径下,将所述循环文件设置为循环线性文件。

本发明实施例的另一目的在于提供一种上述循环线性文件的访问操作方法,

当获取访问指针位置时,所述方法包括如下步骤:

获取文件指针在循环线性文件中的位置;

判断文件指针的物理位置是否小于数据有效开始位置;

如果所述文件指针的物理位置大于数据有效开始位置,则判断文件指针的物理位置是否小于循环线性文件中循环文件大小;

如果所述文件指针物理位置大于循环线性文件中循环文件大小,则获取文件指针在循环线性文件中的位置,并返回所述文件指针在循环线性文件中的位置,所述文件指针在循环线性文件中的位置等于文件指针的物理位置;

当读文件时,所述方法包括以下步骤:

从循环线性文件中读取需要读取的数据流到指定的缓存中,并获取循环线性文件的当前读指针位置;

判断是否读到了数据有效开始位置;

如果没有读到数据有效开始位置,则继续判断是否读到了循环线性文件的循环结束位置;

如果没有读到所述循环线性文件的循环结束位置,则继续判断是否读到了循环文件的末尾;

如果没有读到循环线性文件的末尾,则从循环线性文件的当前位置读取当前需要读取的数据填充到指定的缓存中;

当写文件时,所述方法为直接在循环线性文件的末尾追加写;

当文件定位操作时,所述方法包括如下步骤:

定位文件指针到循环线性文件中需要定位的位置;

判断需要定位的位置是否在数据有效开始位置到循环部分结束位置之间,如果是则定位至循环线性文件的循环部分绕回前部分;

否则判断需要定位的位置是否大于循环文件循环体的大小,如果是则定位至循环线性文件的循环部分绕回后的部分,否则定位文件指针位置到修正后的需要定位的位置。

在本发明实施例中,通过记录循环文件的数据存储结构,将循环文件转换为循环线性文件,然后通过相对应的线性方法访问操作该循环线性文件,从而有效的避免了因循环文件过大时,将循环文件转换为线性文件而带来的转换时间过长的问题,达到了循环文件快速转换成线性文件的目的。

附图说明

图1是本发明实施例提供的流文件的组成示意图;

图2是本发明实施例提供的循环文件转循环线性文件方法流程图;

图3是本发明实施例提供的循环线性文件的访问指针位置的获取方法实现流程图;

图4是本发明实施例提供的循环线性文件的读文件方法实现流程图;

图5是本发明实施例提供的循环线性文件的定位方法实现流程图。

具体实施方式

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

在本发明实施例中,通过记录循环文件的数据存储结构,将循环文件转换为循环线性文件,然后通过相对应的线性方法访问操作该循环线性文件,从而有效的避免了因循环文件过大时,将循环文件转换为线性文件而带来的转换时间过长的问题,达到了循环文件快速转换成线性文件的目的。

如图1所示,示出了本发明实施例中所涉及到的几种流媒体文件的文件组成示意图,A表示线性文件,B表示循环文件,C表示循环线性文件,循环线性文件是介于循环文件和线性文件之间的一种文件,循环线性文件的数据组织方式也是非线性的,但是其操作方法是与线性文件一致的。

在循环线性文件中:

1的开始位置(也是2的结束位置)称为数据有效开始位置(DataStartPos);

1和2共同组成循环线性文件的循环部分,3为循环线性文件的线性部分;

1为循环线性文件绕回前的部分;

2为循环线性文件绕回后的部分。

其中,1、2、3表示数据存储的顺序,箭头方向表示写入数据时文件的增长方向。

图2示出了本发明实施例提供的循环文件转线性文件方法的实现流程,详述如下:

在步骤S201中,判断循环文件的数据有效开始位置(DataStartPos)是否等于零,如果否,执行步骤S204,如果是,执行步骤S202。

在步骤S202中,记录数据有效开始位置(DataStartPos)及循环文件的大小(CircleSize)。

在该步骤中,如果数据有效开始位置(DataStartPos)不等于零,则说明该循环文件已经发生写绕回,则获取该循环文件的数据有效开始位置(DataStartPos)和循环文件的大小(CircleSize)并记录。如图1所示,此时DataStartPos已发生变化,不等于0。

在步骤S203中,关闭该循环文件,将数据有效开始位置(DataStartPos)和循环文件的大小(CircleSize)保存到该循环文件同一路径下,将该循环文件设置为循环线性文件。

作为本发明的一个实施例,通过记录循环文件的DataStartPos和CircleSize,即将循环文件的数据存储结构记录下来,通过这种方式,使循环文件被设置为循环线性文件,在打开该循环文件时,就会以循环线性文件的方式对该文件进行操作,该操作包括写文件、获取文件访问指针位置(Tell)、读文件、文件定位(Seek)。

在步骤S204中,不进行操作。

如果数据有效位置等于零,则说明该循环文件没有发生写绕回,文件内的数据组织方式是线性的,则无需进行转换,只需关闭该文件,使用线性文件方式打开该文件即可。

在本发明实施例中,对该循环线性文件进行写操作时,其写方法与线性文件的写方法是一致的,即直接在循环文件的末尾追加写,文件的写入线性增大,如图1中C的3部分,形成的循环线性文件如图1中C所示。

图3示出了本发明实施例提供的循环线性文件访问指针位置的获取方法实现流程,详述如下:

在步骤S301中,获取文件指针(FilePos)在循环线性文件中的位置。

在步骤S302中,获取文件指针(FilePos)在循环线性文件中的物理位置(PhysicalPos)。

在步骤S303中,判断文件指针的物理位置(PhysicalPos)是否小于数据有效开始位置(DataStartPos),是则执行步骤S304,否则执行步骤S305。

在该步骤中,如果PhysicalPos<DataStartPos,即此时文件指针(FilePos)在循环线性文件中循环绕回后的位置(如图1中C的2部分)。

在步骤S304中,获取文件指针(FilePos)在循环线性文件中的位置。

在该步骤中,文件指针(FilePos)在循环文件中的位置等于文件指针的物理位置(PhysicalPos)加上循环绕回前部分的长度(CircleSize-DataStartPos)。

在步骤S305中,判断文件指针的物理位置(PhysicalPos)是否小于循环体大小(CircleSize),是则执行步骤S306,否则执行步骤S307。

在该步骤中,如果PhysicalPos<CircleSize,即此时文件指针(FilePos)在循环线性文件中循环绕回前的位置(如图1中C的1部分)。

在步骤S306中,获取文件指针在循环线性文件中的位置。

在该步骤中,文件指针在循环线性文件中的位置等于文件指针的物理位置减去循环绕回后部分的长度(PhysicalPos-DataStartPos)。

在步骤S307中,文件指针在循环线性文件中的位置等于文件指针的物理位置。

此时,文件指针所处的位置即为循环线性文件中的线性部分(如图1中C的3部分),即FilePos=PhysicalPos。

在步骤S308中,返回计算得到的文件指针在循环线性文件中的位置。

图4示出了本发明实施例提供的循环线性文件的读文件方法实现流程,详述如下:

在步骤S401中,从循环线性文件中读取需要读取的数据流到指定的缓存pBuf中。

在步骤S402中,获取循环线性文件文件的当前读指针位置。

在步骤S403中,判断是否读到了数据有效开始位置(DataStartPos),是则执行步骤S404,否则执行步骤S407。

在该步骤中,判断读指针位置(ReadPos)是否在数据有效开始位置(DataStartPos)前面(即如图1中C的2部分,即循环线性文件中绕回后的部分)并且从读指针位置到数据有效开始位置的数据量小于或等于需要读取的数据量(DataStartSize-ReadPos<=ReadSize),即判断是否读到了数据有效开始位置。

在步骤S404中,将数据有效开始位置前的数据读取填充到指定的缓存pBuf中。

此时读取到的有效数据量即为DataStartSize-ReadPos。

在步骤S405中,定位循环线性文件的读位置为循环线性文件循环部分的结束位置。

此时,循环线性文件循环部分的数据已经读取完毕,需要重新定位循环线性文件的读位置,将读指针位置跳跃至循环线性文件循环部分的结束位置(CircleSize),定位循环线性文件的读指针位置为CircleSize,下次读数据时从非循环部分开始,即如图1中3部分开始的位置。

在步骤S406中,返回实际读取的数据量,即为DataStartSize-ReadPos。

在步骤S407中,判断是否读到了循环线性文件的循环结束位置,是则执行步骤S408,否则执行步骤S411。

判断读指针位置(ReadPos)是否在循环线性文件的循环部分结束位置(CircleSize)前(即为如图1中C的1结束的部分)并且从读指针位置到循环部分结束位置的数据量(CircleSize-ReadPos)小于或等于需要读取的数据量(ReadSize),即判断是否读到了循环线性文件的循环部分结束位置。

在步骤S408中,将循环部分结束前的数据读取填充到指定的缓存pBuf中。

此时,循环部分结束前的数据大小为(CircleSize-ReadPos),

在步骤S409中,定位循环线性文件的读位置为文件有效开始位置(DataStartPos)。

通过将读指针跳跃至文件有效开始位置,将定位循环线性文件的读指针位置(ReadPos)至文件有效开始位置,下次读数据即从文件有效开始位置开始。

在步骤S410中,返回实际读取的数据量。

此时,实际读取的数据量即为CircleSize-ReadPos。

在步骤S411中,判断是否读到了循环文件的末尾,是则执行步骤S412,否则执行步骤S413。

通过判断循环线性文件的剩余数据量是否小于或等于需要读取的数据量(FileSize-ReadPos<=ReadSize),即判断是否读到了循环线性文件的末尾位置。

在步骤S412中,将循环线性文件剩余数据(FileSize-ReadPos)读取填充到指定的缓存pBuf中。

在步骤S413中,返回实际读取的数据量,即此时实际读取的数据量为(FileSize-ReadPos)。

在步骤S414中,从文件的当前位置读取当前需要读取的数据(ReadSize)填充到指定的缓存pBuf中。

在步骤S415中,返回实际读取的数据量,即此时实际读取的数据量为ReadSize。

图5示出了本发明实施例提供的循环线性文件的定位方法实现流程,详述如下:

在步骤S501中,定位文件指针到循环线性文件中需要定位的位置。

在定位文件的时候,首先通过定位循环线性文件的文件指针到SeekPos位置。

在步骤S502中,判断需要定位的位置(SeekPos)是否在数据有效开始位置(DataStartPos)到循环线性文件的循环部分结束位置(CircleSize)之间,是则执行步骤S503,否则执行步骤S504。

在步骤S503中,定位至循环线性文件的循环部分绕回前部分。

如果SeekPos在DataStartPos到CircleSize之间,即在循环线性文件的循环部分绕回前部分(如图1中C的1部分),将文件指针定位到该循环部分绕回前的部分,即将SeekPos加上DataStartPos,将其位置修正为相对于DataStartPos的位置。

在步骤S504中,判断需要定位的位置是否大于循环线性文件的循环部分大小(CircleSize),是则执行步骤S505,否则执行步骤S506。

在步骤S505中,定位至循环线性文件中循环部分绕回后的部分。

如果SeekPos>CircleSize之间,即在循环线性文件的循环部分绕回后的部分(如图1中C的2部分),将文件指针定位到该循环线性文件中循环文件循环部分绕回后部分,即将SeekPos减去(CircleSize-DataStartPos),将其位置修正为相对于文件起始处的位置。

在步骤S506中,定位文件指针位置到修正后的需要定位的位置(SeekPos)。

在本发明实施例中,通过记录循环文件的数据存储结构,将循环文件的数据有效开始位置和循环文件的大小保存到该循环文件同一路径下,即将循环文件转换为循环线性文件,然后通过相对应的线性方法访问操作该循环线性文件,从而有效的避免了因循环文件过大时,将循环文件转换为线性文件而带来的转换时间过长的问题,达到了循环文件快速转换成线性文件的目的。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号