一种实现在单个文件中循环存储记录及其定位读取偏移方法

文档序号:6594896阅读:623来源:国知局
专利名称:一种实现在单个文件中循环存储记录及其定位读取偏移方法
技术领域
本发明涉及文件存储方法,尤其涉及一种实现在单个文件中循环存储记录及其定位读取偏移方法。
背景技术
在数据存储中常用一种用法:用单个文件线性存储若干个记录,当记录数达到设定阀值时,新增的记录将覆盖最旧的一条记录,如此循环存储。比如:一些日志文件采用这种方式进行记录系统运行的日志,即可以保存系统运行的过程日志,也可以保证日志文件仅占用有限的空间。本发明中称这种文件为循环文件。对循环文件存取记录时,首先要解决是:定位到文件中的最旧记录。简单的定位方法:可以通过给每条记录增加一个记录序号,新增的记录在上次记录序号的基础上增加I。新增记录序号始终是最大的,因此可以通过扫描记录序号,序号最小的记录为最旧记录。但由于记录序号不断增大,以至于后面写入的记录序号可能出现超过计算机的有效存储位数(比如I个字节可以表示最大的数值为256)。如此以往,不断增大的记录序号只能通过增大占用位数来表示更大的数值,这一点不仅浪费了存储空间,同时也增加计算的复杂度。

发明内容
本发明的目的是提供一种可在单个文件中循环添加记录,且记录序号占用的空间不会增大的实现在单个文件中循环存储记录及其定位读取偏移方法。为实现上述目的,本发明的技术方案为:一种实现在单个文件中循环存储记录的方法,所述方法包括以下步骤:I)设定文件可存储 记录条数的上限值N ;2)设定M为不能被N整除的任意正整数,即N%M! =0,%为取模操作;3)按顺序往文件中写入记录,为每条记录分配一个标号,首条记录的标号为0,标号为非负整数,用A表示;4)设定标号的方法为:A = (Αρμ+1)%Μ,其中Apre为上一条记录标号值,%为取模操作即(ApJl)与M相除取余数操作;5)当文件的记录条数首次达到上限值N时,下次从文件头部重新写入记录,并覆盖最旧的记录;6)当文件记录数达到上限值后,扫描所有记录的标号,若(A+l)%M!=Anext,则标号为Kiext的记录位置即是继续写入新记录的位置;其中,Anext为位于当前记录的后一条记录标号;若当前记录位于文件末尾时,Anext为文件头部记录的标号。本发明采用以上的方法,在单个文件中实现循环添加记录。同时,为每个记录分配标号,通过对标号进行取模操作,使记录的标号值不会不断的增大,有效控制了文件占用空间的大小,又保证用户可以存储最新若干条记录。本发明还给出了定位循环文件头部的方法,可方便地实现在文件中写入记录。当所述的文件记录数未达到上限值N,则写游标仍在文件的末尾;当所述的文件记录数达到上限值N后,标号SAnext的记录位置即是继续写入新记录的位置,即是写游标位置。所述每条记录的长度相同,每条记录的长度用L表示。本发明还提供实现在单个文件中循环存储记录的定位读取偏移方法,所述定位读取偏移方法为:I)当文件中的记录数未达到上限值N时,记录偏移Y=ID*L ;其中Y为记录的偏移位置,ID为记录的序号,记录的序号为记录按照添加时间顺序进行排序,从O开始计数,记录的序号ID最大值为N — I ;2)当文件记录数达到上限值N后,Y=(C+ID*L)% (N*L);其中,Y为记录的偏移位置,L为记录的长度,设定每条记录的长度相同;ID为记录的序号,记录的序号为记录按照添加时间顺序进行排序,从O开始计数,记录的序号ID最大值为N— I ;(:为写游标位置的偏移。采用以上的方法,可简便地定位读取记录的位置,从而可方便地读取记录。总之,本发明通过给记录分配标号和取模的方法,实现了在单文件中循环添加记录,可简便定位循环文件中的写游标位置,从而很好地实现读取记录和写入记录;即有效控制了文件占用空间的大小,又保证用户可以存储最新若干条记录。在实际使用中,本发明的方法效果良好,值得推广。
具体实施例方式本发明实现在单个文件中循环存储记录的方法,所述方法包括以下步骤:I)设定文件可存储记录条数的上限值N ;2)设定M为不能被N整除的任意正整数,即N%M! =0,%为取模操作;3)按顺序往文件中写入记录,为每条记录分配一个标号,首条记录的标号为0,标号为非负整数,用A表示;4)设定标号的方法为:A = (Αρμ+1)%Μ,其中Apre为上一条记录标号值,%为取模操作即(ApJl)与M相除取余数操作;如表I所示;表I单文件中记录标号的排列情况
权利要求
1.一种实现在单个文件中循环存储记录的方法,其特征在于:所述方法包括以下步骤: O设定文件可存储记录条数的上限值N ; 2)设定M为不能被N整除的任意正整数,即Ν%Μ!=0,%为取模操作; 3)按顺序往文件中写入记录,为每条记录分配一个标号,首条记录的标号为O,标号为非负整数,用A表示; 4)设定标号的方法为:A= (Apm+1)%M,其中Apm为上一条记录标号值,%为取模操作即(Apre+1)与M相除取余数操作; 5)当文件中的记录条数首次达到上限值N时,下次从文件头部重新写入记录,并覆盖最旧的记录; 6)当文件中的记录数达到上限值后,扫描所有记录的标号,若(A+l)%M!=Anext,则标号为Kiext的记录位置即是继续写入新记录的位置;其中,Anext为位于当前记录的后一条记录标号;若当前记录位于文件末尾时,Anext为文件头部记录的标号。
2.根据权利要求1所述的实现在单个文件中循环存储记录的方法,其特征在于:当所述的文件中的记录数未达到上限值N,则写游标仍在文件的末尾;当所述文件中的记录数达到上限值N后,标号为Anrart的记录位置即是继续写入新记录的位置,即是写游标位置。
3.根据权利要求1所述的实现在单个文件中循环存储记录的方法,其特征在于:所述每条记录的长度相同,每条记录的长度用L表不。
4.根据权利要求1-3之一所述的实现在单个文件中循环存储记录的定位读取偏移方法,其特征在于:所述定位读取偏移方法为: 1)当文件中的记录数未达到上限值N时,记录偏移Y=ID*L; 其中Y为记录的偏移位置,ID为记录的序号,记录的序号为记录按照添加时间顺序进行排序,从O开始计数,记录的序号ID最大值为N — I ; 2)当文件记录数达到上限值N后,Y=(C+ID*L)%(N*L); 其中,Y为记录的偏移位置,L为记录的长度,设定每条记录的长度相同;ID为记录的序号,记录的序号为记录按照添加时间顺序进行排序,从O开始计数,记录的序号ID最大值为N — I ;C为写游标位置的偏移。
全文摘要
本发明公开了一种实现在单个文件中循环存储记录的方法,其包括以下步骤1)设定文件可存储记录条数的上限值N;2)设定M为不能被N整除的任意正整数;3)按顺序往文件中写入记录,为每条记录分配一个标号A;4)设定标号的方法为A=(Apre+1)%M,其中Apre为上一条记录标号值;5)当文件中的记录数达到上限值后,扫描所有记录的标号,若(A+1)%M!=Anext,则标号为Anext的记录位置即是继续写入新记录的位置。本发明通过给记录分配标号和取模的方法,实现了在单文件中循环添加记录,可简便定位循环文件中的写游标位置,从而很好地实现读取记录和写入记录,又可有效控制了文件占用空间的大小。
文档编号G06F17/30GK103226602SQ20131015055
公开日2013年7月31日 申请日期2013年4月26日 优先权日2013年4月26日
发明者王斌 申请人:福建联迪商用设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1