发明内容
本发明所要解决的技术问题是提供一种文件指针定位的方法及装置,用以提高文件指针定位操作的效率。
为了解决上述问题,本发明公开了一种文件指针定位的方法,包括:
依据需要定位的目标文件指针位置,在预置的位置点列表中,查找在该目标文件指针位置之前最接近的位置点;所述位置点具有对应的簇地址及文件指针位置信息;
从所述位置点的簇地址开始,定位所述目标文件指针的位置。
优选的,所述的方法,还包括:
若预置的位置点列表中没有在所述目标文件指针位置之前的位置点,则从当前文件的起始簇地址开始,定位所述目标文件指针的位置。
优选的,所述位置点包括主位置点,所述位置点列表通过以下步骤设置:
依据FAT表获取当前文件的簇链;
按照预设的间隔簇数将当前文件的簇链等分成N个区间,在每个区间中确定一个主位置点,并将该主位置点对应的簇地址及文件指针位置写入位置点列表中,其中,所述N为正整数。
优选的,所述位置点包括主位置点,所述位置点列表通过以下步骤设置:
在从当前文件的起始簇地址开始,定位目标文件指针的位置的过程中,若当前定位到的簇地址及文件指针位置满足主位置点判断条件且未记录在位置点列表中,则将当前簇地址及文件指针位置写入位置点列表中;所述主位置点判断条件为,对应于按照预设的间隔簇数确定的簇地址及文件指针位置。
优选的,所述位置点还包括子位置点,所述的方法还包括:
将定位到的目标文件指针位置及对应的簇地址,作为子位置点的信息写入位置点列表中。
优选的,所述的方法,还包括:
若所述目标文件指针位置,与在先记录的最接近子位置点相比超出一定距离范围,则用所述目标文件指针位置及对应的簇地址,替换位置点列表中所述在先记录的子位置点信息。
优选的,所述定位目标文件指针位置的步骤包括:
从当前定位的簇地址开始,通过查找FAT表获得下一个簇地址;
判断所述目标文件指针位置是否在该簇内,若否,则继续查找下一个簇地址;若是,则在该簇中确定所述目标文件指针位置对应的扇区以及在扇区中的偏移量。
优选的,所述的方法,还包括:
若在预置的位置点列表中,查找到与所述目标文件指针位置对应的位置点,则直接依据所述位置点对应的簇地址及文件指针位置信息,定位所述目标文件指针的位置。
优选的,所述位置点列表存在内存中。
优选的,所述文件为音频文件或视频文件,所述主位置点设置操作在打开文件获取文件长度时进行。
本发明实施例还公开了一种文件指针定位的装置,包括:
位置点预置模块,用于预置位置点列表;
位置点查找模块,用于依据需要定位的目标文件指针位置,在预置的位置点列表中,查找在该目标文件指针位置之前最接近的位置点;所述位置点具有对应的簇地址及文件指针位置信息;
第一定位模块,用于从所述位置点的簇地址开始,定位所述目标文件指针的位置。
优选的,所述的装置,还包括:
第二定位模块,用于在预置的位置点列表中没有在所述目标文件指针位置之前的位置点时,从当前文件的起始簇地址开始,定位所述目标文件指针的位置。
优选的,所述位置点包括主位置点,所述位置点预置模块包括:
簇链获取子模块,用于依据FAT表获取当前文件的簇链;
第一主位置点确定子模块,用于按照预设的间隔簇数将当前文件的簇链等分成N个区间,在每个区间中确定一个主位置点,并将该主位置点对应的簇地址及文件指针位置写入位置点列表中,其中,所述N为正整数。
优选的,所述位置点包括主位置点,所述位置点预置模块包括:
第二主位置点确定子模块,用于在从当前文件的起始簇地址开始,定位目标文件指针的位置的过程中,若当前定位到的簇地址及文件指针位置满足主位置点判断条件且未记录在位置点列表中,则将当前簇地址及文件指针位置写入位置点列表中;所述主位置点判断条件为,对应于按照预设的间隔簇数确定的簇地址及文件指针位置。
优选的,所述位置点还包括子位置点,所述的装置还包括:
子位置点设置模块,用于将定位到的目标文件指针位置及对应的簇地址,作为子位置点的信息写入位置点列表中。
优选的,所述的装置,还包括:
子位置点替换模块,用于若所述目标文件指针位置,与在先记录的最接近子位置点相比超出一定距离范围,则用所述目标文件指针位置及对应的簇地址,替换位置点列表中所述在先记录的子位置点信息。
优选的,所述位置点列表存在内存中。
与现有技术相比,本发明具有以下优点:
本发明根据播放音视频文件时seek操作的特征,在每次seek操作的过程中,根据一定的规则保存一些位置点的信息,以便在以后的seek操作中可以作为参考,而不需要从文件的起始簇开始重新进行定位,从而提高seek操作的效率,提高文件的访问速度,并提高整个系统的音视频播放效果。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
目前手机、PMP等手持设备基本都支持多种格式的音频文件和视频文件的播放,这些文件一般是存放在sd卡,或nand flash上的,总之都是以文件的形式存放于磁盘上,都需要通过FAT系统来管理存放的音频或视频数据,以及,通过FAT系统读取音频或视频数据来实现播放的功能。
从数据存储方式来说,不同格式的音频文件和视频文件的数据存放格式不相同;在播放这些文件的时候,读取文件数据的操作方式也不尽相同。如对于视频文件(包含音频)而言,视频文件中的音频和视频有两种存放方式,一种是交错存放,即视频数据块和音频数据块在文件中交错出现;一种是分开存放,即文件分成两大块,一块存视频数据,一块存音频数据,事实上,无论哪种存放方式都不可能通过简单地顺序读取数据实现视频文件的正确播放。由于在视频数据块中会存放多帧视频数据,在音频数据块中会存放多帧音频数据,播放时需要音视频同步,所以需要在这两块数据中来回的读数据,这就涉及到文件指针定位的操作,而且这种操作会比较频繁,如果seek操作的效率低下的话,必然影响读取音视频文件的速度,从而导致音视频文件播放不流畅或者音视频不同步的情况发生。随着目前多媒体处理系统支持的音视频格式越来越多,其对应的文件也越来越大,当文件尺寸非常大时,这种情况会更加严重。
具体而言,在手机,PMP等包含了音视频播放等功能的各类设备上,经常可能出现以下几种情况:
第一种:每次文件指针定位的位置都是上一次文件指针定位的位置之后;
例如:上一次已经seek到了0x1000的位置,如果现在要seek到0x2000的位置,也无法从0x1000对应的簇号开始寻找,而是必须从文件的起始簇开始寻找。
第二种:每次文件指针定位的位置都是上一次文件指针定位的位置之前;
例如:上一次seek到0x2000的位置,现在要seek到0x1000,虽然在seek到0x2000的过程中已经可以得到0x1000的位置对应的簇号,但是由于没有记录下来,导致仍然需要从文件起始簇开始顺序寻找0x1000的位置对应的簇号。
第三种:当要访问的文件长度很大,要定位的文件位置又比较靠近文件尾时,由于文件的簇链很长,如果要从文件起始簇开始直到找到文件最后的簇号是非常耗时的,并且虽然此次操作几乎遍历了整个文件的所有簇号,但是由于没有任何记录处理,消耗的大量时间对以后的操作没有起到任何有益的作用。
上述几种情况在实际中会大概率地出现,所以,对于多媒体处理系统来说,FAT系统seek操作的效率是至关重要的,提高seek操作的效率,可直接提高文件的访问速度,从而可以提高整个系统的音视频播放效果。
正是由于本专利发明人注意到了这一点,因而创造性地提出本发明实施例的核心构思之一在于,根据播放音视频文件时seek操作的特征,在每次seek操作的过程中,根据一定的规则保存一些位置点的信息,以便在以后的seek操作中可以作为参考,而不需要从文件的起始簇开始重新进行定位。
参考图1,示出了本发明的一种文件指针定位的方法实施例1的步骤流程图,具体可以包括以下步骤:
步骤101、依据需要定位的目标文件指针位置,在预置的位置点列表中,查找在该目标文件指针位置之前最接近的位置点;所述位置点具有对应的簇地址及文件指针位置信息;
步骤102、从所述位置点的簇地址开始,定位所述目标文件指针的位置。
在本发明的一种优选实施例中,所述位置点可以包括主位置点,所述位置点列表可以在文件指针定位前,通过以下步骤进行设置:
依据FAT表获取当前文件的簇链;
按照预设的间隔簇数将当前文件的簇链等分成N个区间,在每个区间中确定一个主位置点,并将该主位置点对应的簇地址及文件指针位置写入位置点列表中,其中,所述N为正整数。
在具体实现中,在音频文件或视频文件播放(读取)前有一次获取文件长度的操作,即seek到文件尾的操作,所述主位置点的设置操作即可以在该获取文件长度时进行。一种主位置点设置的具体操作示例为,首先从当前文件的起始簇地址开始seek,通过不断地查找FAT表来获得下一个簇地址,针对每次获得的下一个簇地址,都判断其是否为满足预设的间隔簇数对应的主位置点,该间隔簇数优选为簇大小的整数倍,如为64M的整数倍,若是,则记录为主位置点,直到seek至文件尾(簇链结束标识)。
当设置好主位置点后,后续的目标文件指针的seek操作就不需要从起始簇地址开始,而从在其之前最接近的主位置点开始seek就可以了。在实际中,所述位置点列表可以保存在内存中。
例如,假设在音频文件或视频文件播放(读取)前获取文件长度的操作中定位到如下几个主位置点:64Mbytes位置、128Mbytes位置、192Mbytes位置、256Mbytes位置;当前seek的目标文件指针位置为180Mbytes处,则从128Mbytes位置对应的簇地址开始seek,通过查FAT表得到下一个簇地址,直到找到180M位置对应的簇,再找到180M位置所在的sector,以及在sector中的偏移,seek操作完成。
参考图2,示出了本发明的一种文件指针定位的方法实施例2的步骤流程图,具体可以包括以下步骤:
步骤201、依据需要定位的目标文件指针位置,在预置的位置点列表中,查找在该目标文件指针位置之前最接近的位置点;所述位置点具有对应的簇地址及文件指针位置信息;
步骤202、若所述预置的位置点列表存在目标文件指针位置之前最接近的位置点,则从所述位置点的簇地址开始,执行步骤204;
步骤203、若所述预置的位置点列表中没有在目标文件指针位置之前的位置点,则从当前文件的起始簇地址开始,执行步骤204;
步骤204、从当前定位的簇地址开始,通过查找FAT表获得下一个簇地址;
步骤205、判断当前定位到的簇地址及文件指针位置是否满足主位置点判断条件且未记录在位置点列表中,所述主位置点判断条件为,对应于按照预设的间隔簇数确定的簇地址及文件指针位置,若否,则直接执行步骤207;若是,则先执行步骤206,再执行步骤207;
步骤206、将当前簇地址及文件指针位置写入位置点列表中;
步骤207、判断所述目标文件指针位置是否在该簇内,若否,则返回步骤204;若是,则执行步骤208;
步骤208、在该簇中确定所述目标文件指针位置对应的扇区以及在扇区中的偏移量。
可以理解,如果在实际中没有在音频文件或视频文件播放(读取)前获取文件长度的操作,则在本实施例中,所述主位置点可以在从文件起始簇地址开始seek的操作中,通过以下步骤设置:
在从当前文件的起始簇地址开始,定位目标文件指针的位置的过程中,若当前定位到的簇地址及文件指针位置满足主位置点判断条件且未记录在位置点列表中,则将当前簇地址及文件指针位置写入位置点列表中;所述主位置点判断条件为,对应于按照预设的间隔簇数确定的簇地址及文件指针位置。
例如,在开始播放(读取)文件时,假设当前seek的文件指针位置为180Mbytes处,由于没有在先的位置点,所以只能从文件起始簇地址开始,通过查FAT表得到下一个簇地址,针对每次获得的下一个簇地址,都判断其是否为满足预设间隔簇数的主位置点,若是,则记录为主位置点,假设该间隔簇数为64M的整数倍,则在经过64Mbytes位置、128Mbytes位置时,在位置点列表中分别作为主位置点记录下对应的簇地址和文件指针位置,直到找到180Mbytes位置对应的簇地址(如簇号),然后遍历该簇中的扇区,直到找到180Mbytes位置所在的sector,以及在sector中的偏移。
为进一步提高seek操作的效率,在本发明实施例中,还可以在相邻主位置点形成的文件区间内部,动态地设置M个最近几次seek到的文件指针位置(子位置点),M为正整数,可以由用户任意设定。即作为本发明的一种优选实施例,所述位置点还可以包括子位置点,本实施例还可以包括如下步骤:
步骤209、将定位到的目标文件指针位置及对应的簇地址,作为子位置点的信息写入位置点列表中。
如将上例中180Mbytes位置对应的簇地址和文件指针位置作为子位置点信息写入位置点列表中。
为使本领域技术人员更好地理解本发明,以下通过一个具体示例说明本实施例。
假设当前seek的目标文件指针位置为200Mbytes处,由于位置点列表中记录了64M、128Mbytes位置的主位置点信息,还记录了180Mbytes位置的子位置点信息,所以可以得到在目标位置200Mbytes之前最接近的位置点为180Mbytes,故从该子位置点开始seek。通过查FAT表得到下一个簇地址,针对该簇地址,一是判断其是否为满足预设的间隔簇数对应的主位置点,二是判断其是否为200M位置对应的簇,假设所述间隔簇数为64M的整数倍,则在本次seek操作过程中,经过192Mbytes的位置时,会在位置点列表中作为主位置点记录下对应的簇地址和文件指针位置;在找到200M位置对应的簇地址以及所在sector及在sector中的偏移后,将该目标文件指针位置作为子位置点记录至位置点列表,seek操作完成。
在实际中,在相邻主位置点之间设置的子位置点是可以依据实际情况随时更新或替换的,即对于位置点列表中记录的子位置点而言,如果当次seek到的目标文件指针位置满足替换条件,则用当次seek到的目标文件指针位置及对应的簇地址,替换位置点列表中与其最接近的那个子位置点的记录。
即在本发明实施例中,还可以包括如下步骤:
若所述目标文件指针位置,与在先记录的最接近子位置点相比超出一定距离范围,则用所述目标文件指针位置及对应的簇地址,替换位置点列表中所述在先记录的子位置点信息。
例如,假设当次seek的目标文件指针位置为180Mbytes处,当前的位置点列表中记录了以下主位置点信息:64Mbytes对应的簇地址及文件指针位置、128Mbytes对应的簇地址及文件指针位置、192Mbytes对应的簇地址及文件指针位置、256Mbytes对应的簇地址及文件指针位置;以及,在该位置点列表中记录了以下子位置点信息:160Mbytes对应的簇地址及文件指针位置;在这种情况下,则从160Mbytes对应的簇地址开始,通过查FAT表得到下一个簇地址,直到找到180M位置对应的簇,再找到180M位置所在的sector,以及在sector中的偏移;如果子位置点的文件指针位置与目标文件指针位置的距离大于预设的距离范围FILE_SEEK_CACHE_MIN_INTERVAL,如10M,则将180Mbytes对应的簇地址及文件指针位置替换位置点列表中对于子位置点160Mbytes的记录。
在具体实现中,如果在预置的位置点列表中查找到的在目标文件指针位置之前最接近的位置点、即为目标文件指针位置,则直接依据所述位置点对应的簇地址及文件指针位置信息,定位所述目标文件指针的位置即可。
对于本发明实施例而言,所述主位置点之间的簇数间隔、相邻主位置点之间的子位置点个数以及子位置点的替换条件可以由本领域技术人员根据实际情况任意设置,本发明对此无需加以限制。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
参考图3,示出了本发明的一种文件指针定位的装置实施例的结构图,具体可以包括以下模块:
位置点预置模块301,用于预置位置点列表;
位置点查找模块302,用于依据需要定位的目标文件指针位置,在预置的位置点列表中,查找在该目标文件指针位置之前最接近的位置点;所述位置点具有对应的簇地址及文件指针位置信息;
第一定位模块302,用于从所述位置点的簇地址开始,定位所述目标文件指针的位置。
一般而言,所述定位目标文件指针位置的操作可以由以下子模块完成:
FAT查找子模块,用于从当前定位的簇地址开始,通过查找FAT表获得下一个簇地址;
目标位置确定子模块,用于判断所述目标文件指针位置是否在该簇内,若否,则继续查找下一个簇地址;若是,则在该簇中确定所述目标文件指针位置对应的扇区以及在扇区中的偏移量。
在具体实现中,所述位置点可以包括主位置点,所述位置点预置模块具体可以包括以下子模块:
簇链获取子模块,用于依据FAT表获取当前文件的簇链;
第一主位置点确定子模块,用于按照预设的间隔簇数将当前文件的簇链等分成N个区间,在每个区间中确定一个主位置点,并将该主位置点对应的簇地址及文件指针位置写入位置点列表中,其中,所述N为正整数。
作为本发明的一种优选实施例,所述位置点还可以包括子位置点,所述文件指针定位的装置还可以包括如下模块:
子位置点设置模块,用于将定位到的目标文件指针位置及对应的簇地址,作为子位置点的信息写入位置点列表中。
为进一步提高seek操作的效率,保证子位置点总是对应最近几次seek到的文件指针位置,在本发明的一种优选实施例中,所述文件指针定位的装置还可以包括如下模块:
子位置点替换模块,用于若所述目标文件指针位置,与在先记录的最接近子位置点相比超出一定距离范围,则用所述目标文件指针位置及对应的簇地址,替换位置点列表中所述在先记录的子位置点信息。
作为本发明的另一种优选实施例中,所述文件指针定位的装置还可以包括以下模块:
第二定位模块,用于在预置的位置点列表中没有在所述目标文件指针位置之前的位置点时,从当前文件的起始簇地址开始,定位所述目标文件指针的位置。
在这种情况下,所述位置点预置模块还可以通过以下子模块设置主位置点:
第二主位置点确定子模块,用于在从当前文件的起始簇地址开始,定位目标文件指针的位置的过程中,若当前定位到的簇地址及文件指针位置满足主位置点判断条件且未记录在位置点列表中,则将当前簇地址及文件指针位置写入位置点列表中;所述主位置点判断条件为,对应于按照预设的间隔簇数确定的簇地址及文件指针位置。
在实际中,所述位置点列表可以设置在内存中。
对于装置实施例而言,由于其与前述的方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
本发明可用于众多通用或专用的计算系统环境或配置中。例如:多处理器系统、服务器、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上对本发明所提供的一种文件指针定位的方法及一种文件指针定位的装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。