文件读写方法及系统与流程

文档序号:11653895阅读:433来源:国知局
文件读写方法及系统与流程

本发明涉及计算机技术领域,特别涉及一种文件读写方法及系统。



背景技术:

目前,java提供的文件随机访问类randomaccessfile访问文件时直接读写磁盘,在高频率的小范围随机读写时受限于磁盘io瓶颈,整体性能偏低,而且java本身的缓冲读写类又只能顺序访问文件。

在现有的离线系统中,普遍存在大量的对单文件的随机读写操作。由于randomaccessfile类本身的低效率,严重影响了离线系统文件操作的效率,进而造成整个离线系统的吞吐量下降,无法满足客户的使用需要。



技术实现要素:

本发明提供了一种能够在java环境下高效率随机访问文件的文件读写方法,读写文件时,依据访问的位置,在内存中开辟缓冲窗口,预先读取缓冲窗口覆盖的内容,后续的读写访问有很大概率是落在缓冲窗口中,这样就把多次磁盘io转化成了一次磁盘io加多次内存访问,大大提高访问效率。

本发明提供的文件读写方法,包括以下步骤:

响应于外部应用的文件读写访问请求,根据访问的位置,在内存中开辟缓冲窗口;

判断所要读写的文件内容长度是否大于所述缓冲窗口的长度;

当文件内容长度大于所述缓冲窗口的长度时,将所述缓冲窗口中的数据写入磁盘,从磁盘中直接读写文件,并在读写结束位置开辟新的缓冲窗口;

当文件内容长度小于或等于所述缓冲窗口的长度时,根据文件的开始位置,动态调整所述缓冲窗口的位置,从所述缓冲窗口中读写文件。

作为一种可实施方式,所述当文件内容长度小于或等于所述缓冲窗口的长度时,根据文件的开始位置,动态调整所述缓冲窗口的位置,从所述缓冲窗口中读写文件,包括以下步骤:

当所要读取的文件内容小于或等于所述缓冲窗口的长度时,判断读开始位置;

当所述读开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处读取文件;

当所述读开始位置位于所述缓冲窗口外部时,在所述读开始位置开辟新的缓冲窗口,读入文件内容,然后从所述新的缓冲窗口中读取文件。

作为一种可实施方式,所述当文件内容长度小于或等于所述缓冲窗口的长度时,根据文件的开始位置,动态调整所述缓冲窗口的位置,从所述缓冲窗口中读写文件,包括以下步骤:

当所要写入的文件内容小于或等于所述缓冲窗口的长度时,判断写开始位置;

当所述写开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处写入文件;

当所述写开始位置位于所述缓冲窗口外部时,则从写开始位置开辟新的缓冲窗口,读入文件内容,然后将文件写入所述新的缓冲窗口。

作为一种可实施方式,当所述读开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处读取文件之后,还包括以下步骤:

当所述缓冲窗口内的数据不足时,先将所述缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,从新的缓冲窗口中读取剩余文件。

作为一种可实施方式,当所述写开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处写入文件之后,还包括以下步骤:

当待写数据超出所述缓冲窗的范围时,先将所述缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,将待写数据写入所述新的缓冲窗口。

相应地,本发明还提供一种文件读写系统,包括访问响应模块、长度判断模块、第一读写模块以及第二读写模块;

所述访问响应模块,用于响应于外部应用的文件读写访问请求,根据访问的位置,在内存中开辟缓冲窗口;

所述长度判断模块,用于判断所要读写的文件内容长度是否大于所述缓冲窗口的长度;

所述第一读写模块,用于当文件内容长度大于所述缓冲窗口的长度时,将所述缓冲窗口中的数据写入磁盘,从磁盘中直接读写文件,并在读写结束位置开辟新的缓冲窗口;

所述第二读写模块,用于当文件内容长度小于或等于所述缓冲窗口的长度时,根据文件的开始位置,动态调整所述缓冲窗口的位置,从所述缓冲窗口中读写文件。

作为一种可实施方式,所述第二读写模块包括读开始位置判断单元、第一读取单元以及第二读取单元;

所述读开始位置判断单元,用于当所要读取的文件内容小于或等于所述缓冲窗口的长度时,判断读开始位置;

所述第一读取单元,用于当所述读开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处读取文件;

所述第二读取单元,用于当所述读开始位置位于所述缓冲窗口外部时,在所述读开始位置开辟新的缓冲窗口,读入文件内容,然后从所述新的缓冲窗口中读取文件。

作为一种可实施方式,所述第二读写模块包括写开始位置判断单元、第一写入单元以及第二写入单元;

所述写开始位置判断单元,用于当所要写入的文件内容小于或等于所述缓冲窗口的长度时,判断写开始位置;

所述第一写入单元,用于当所述写开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处写入文件;

所述第二写入单元,用于当所述写开始位置位于所述缓冲窗口外部时,则从写开始位置开辟新的缓冲窗口,读入文件内容,然后将文件写入所述新的缓冲窗口。

作为一种可实施方式,所述第一读取单元还用于在所述读开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处读取文件之后,当所述缓冲窗口内的数据不足时,先将所述缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,从新的缓冲窗口中读取剩余文件。

作为一种可实施方式,所述第一写入单元还用于在所述写开始位置位于所述缓冲窗口内时,直接从所述缓冲窗口映射的位置处写入文件之后,当待写数据超出所述缓冲窗的范围时,先将所述缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,将待写数据写入所述新的缓冲窗口。

本发明相比于现有技术的有益效果在于:

本发明提供的文件读写方法及系统,通过在内存中开辟缓冲窗口,在访问的文件内容超出缓冲窗口范围时,将原缓冲窗口内容与磁盘文件同步,并在新位置重新开辟缓冲窗口;在访问的文件内容未超出缓冲窗口的范围时,根据文件的开始位置,动态调整缓冲窗口的位置,从缓冲窗口中读写文件。本发明提供的文件读写方法及系统,利用缓冲窗口,极大的提高了文件读写的效率,尤其是大文件频繁随机读写时的访问效率。

附图说明

图1为本发明实施例一提供的文件读写方法的流程示意图;

图2为本发明实施例提供的文件打开流程示意图;

图3为本发明实施例二提供的读取文件的流程示意图;

图4为本发明实施例三提供的写入文件的流程示意图;

图5为本发明实施例提供的关闭文件流程示意图;

图6为本发明实施例四提供的文件读写系统的结构示意图。

具体实施方式

以下结合附图,对本发明上述的和另外的技术特征和优点进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的部分实施例,而不是全部实施例。

参见图1,本发明实施例一提供了一种文件读写方法,包括以下步骤:

s100、响应于外部应用的文件读写访问请求,根据访问的位置,在内存中开辟缓冲窗口;

s200、判断所要读写的文件内容长度是否大于缓冲窗口的长度;

s300、当文件内容长度大于缓冲窗口的长度时,将缓冲窗口中的数据写入磁盘,从磁盘中直接读写文件,并在读写结束位置开辟新的缓冲窗口;

s400、当文件内容长度小于或等于缓冲窗口的长度时,根据文件的开始位置,动态调整缓冲窗口的位置,从缓冲窗口中读写文件。

本实施例在读写文件时,依据访问的位置,在内存中开辟缓冲窗口,预先读取窗口覆盖的内容,后续的读写访问有很大概率是落在缓冲窗口中,这样就把多次磁盘io转化成了一次磁盘io加多次内存访问,从而提高访问效率。

在访问的文件内容超出缓冲窗口范围时,将原缓冲窗口内容与磁盘文件同步,并在新位置重新开辟缓冲窗口;在访问的文件内容未超出缓冲窗口的范围时,根据文件的开始位置,动态调整缓冲窗口的位置,从缓冲窗口中读写文件。利用缓冲窗口,极大的提高了文件读写的效率,尤其是大文件频繁随机读写时的访问效率。

在读写文件之前,首先要打开或者创建文件。

进一步地,参见图2,在步骤s100之前,打开或创建文件时的流程为:

s110、打开原始文件,得到文件句柄;

s120、将文件头部前8192字节数据读入内存(若是创建新文件则只开辟内存),记录文件指针位置;

s130、返回文件句柄。

文件访问通常包括读取和写入两种机制,下面分别针对这两种机制对本发明的实现过程进行说明。

参见图3,本发明实施例二提供了一种读取文件的方法,流程如下:

s20、外部应用发起读请求;

s21、如果要读取的文件内容的长度大于缓冲窗口的长度,则先将缓冲窗口中的内容(即数据)写入磁盘,然后从磁盘中直接读取文件,并在读结束位置开辟新的缓冲窗口;

由于预先开辟的缓冲窗口用于读取或写入文件,所以当要读取的文件内容的长度大于缓冲窗口的长度,先将缓冲窗口中的内容(此前写入的数据)写入磁盘进行存储,然后从磁盘中直接读取文件,并在读结束位置开辟新的缓冲窗口,留给后续文件读写使用。

s22、当所要读取的文件内容小于或等于缓冲窗口的长度时,判断读开始位置;

s23、当读开始位置位于缓冲窗口内时,直接从缓冲窗口映射的位置处读取文件;当缓冲窗口内的数据不足时,先将缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,从新的缓冲窗口中读取剩余文件。

s24、读开始位置不在窗口内的,即读开始位置位于缓冲窗口外部时,在读开始位置开辟新的缓冲窗口,读入文件内容,然后从新的缓冲窗口中读取文件。

参见图4,本发明实施例三提供了一种写入文件的方法,流程如下:

s30、外部应用发起写请求;

s31、如果要写入的文件内容的长度大于缓冲窗口的长度,则先将缓冲窗口中的内容(即数据)写入磁盘,然后直接向磁盘中写入文件,并在写结束位置开辟新的缓冲窗口;

由于预先开辟的缓冲窗口用于读取或写入文件,所以当要写入的文件内容的长度大于缓冲窗口的长度,先将缓冲窗口中的内容(此前写入的数据)同步到磁盘进行存储,然后直接写文件到磁盘中,并在写结束位置开辟新的缓冲窗口,留给后续文件读写使用。

s32、当所要写入的文件内容小于或等于缓冲窗口的长度时,判断写开始位置;

s33、当写开始位置位于缓冲窗口内时,直接从缓冲窗口映射的位置处写入文件;当待写数据超出缓冲窗的范围时,先将缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,将待写数据写入新的缓冲窗口;

s24、读开始位置不在缓冲窗口内的,即写开始位置位于缓冲窗口外部时,则从写开始位置开辟新的缓冲窗口,读入文件内容,然后将文件写入新的缓冲窗口。

进一步地,参见图5,在步骤s300和s400之后,关闭文件时的流程为:

s510、将缓冲窗口内容写入磁盘;

s520、关闭文件句柄。

基于统一发明构思,本发明还提供了一种文件读写系统,该系统的原理与前述文件读写方法相同,故系统的实施可参照上述方法实现。

参见图6,本发明实施例四提供的文件读写系统,包括访问响应模块100、长度判断模块200、第一读写模块300以及第二读写模块400;

访问响应模块100用于响应于外部应用的文件读写访问请求,根据访问的位置,在内存中开辟缓冲窗口;

长度判断模块200用于判断所要读写的文件内容长度是否大于缓冲窗口的长度;

第一读写模块300用于当文件内容长度大于缓冲窗口的长度时,将缓冲窗口中的数据写入磁盘,从磁盘中直接读写文件,并在读写结束位置开辟新的缓冲窗口;

第二读写模块400用于当文件内容长度小于或等于缓冲窗口的长度时,根据文件的开始位置,动态调整缓冲窗口的位置,从缓冲窗口中读写文件。

作为一种可实施方式,第二读写模块包括读开始位置判断单元、第一读取单元以及第二读取单元;

读开始位置判断单元,用于当所要读取的文件内容小于或等于缓冲窗口的长度时,判断读开始位置;

第一读取单元,用于当读开始位置位于缓冲窗口内时,直接从缓冲窗口映射的位置处读取文件;

第二读取单元,用于当读开始位置位于缓冲窗口外部时,在读开始位置开辟新的缓冲窗口,读入文件内容,然后从新的缓冲窗口中读取文件。

作为一种可实施方式,第二读写模块包括写开始位置判断单元、第一写入单元以及第二写入单元;

写开始位置判断单元,用于当所要写入的文件内容小于或等于缓冲窗口的长度时,判断写开始位置;

第一写入单元,用于当写开始位置位于缓冲窗口内时,直接从缓冲窗口映射的位置处写入文件;

第二写入单元,用于当写开始位置位于缓冲窗口外部时,则从写开始位置开辟新的缓冲窗口,读入文件内容,然后将文件写入新的缓冲窗口。

作为一种可实施方式,第一读取单元还用于在读开始位置位于缓冲窗口内时,直接从缓冲窗口映射的位置处读取文件之后,当缓冲窗口内的数据不足时,先将缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,从新的缓冲窗口中读取剩余文件。

作为一种可实施方式,第一写入单元还用于在写开始位置位于缓冲窗口内时,直接从缓冲窗口映射的位置处写入文件之后,当待写数据超出缓冲窗的范围时,先将缓冲窗口中的数据同步写入磁盘,再开辟新的缓冲窗口,将待写数据写入新的缓冲窗口。

本发明通过在内存中开辟缓冲窗口,随着文件的使用过程,动态调整缓冲窗口的位置,从缓冲窗口中读写文件。利用缓冲窗口,极大的提高了文件读写的效率,尤其是大文件频繁随机读写时的访问效率。

以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步的详细说明,应当理解,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围。特别指出,对于本领域技术人员来说,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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