CN104133846A - 文件复制方法和装置 - Google Patents
文件复制方法和装置 Download PDFInfo
- Publication number
- CN104133846A CN104133846A CN201410309788.4A CN201410309788A CN104133846A CN 104133846 A CN104133846 A CN 104133846A CN 201410309788 A CN201410309788 A CN 201410309788A CN 104133846 A CN104133846 A CN 104133846A
- Authority
- CN
- China
- Prior art keywords
- file
- replicate run
- unit
- core layer
- carries out
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种文件复制方法和装置,该文件复制方法包括确定需要复制的文件;获取所述需要复制的文件的大小;根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。该方法能够提高文件复制的效率。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种文件复制方法和装置。
背景技术
用户可以通过复制操作将文件从一个地方存在到另一个地方。在移动设备,如手机上也可以完成文件复制操作。现有技术中,Android手机上的复制操作是采用java代码进行的。但是,Android手机存储设备性能相对较差和java语言对输入输出(Input and Output,IO)操作封装较深且函数异常处理非常多,从而导致在Android手机上用java语言对大文件做单线程复制操作效率比较低。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的一个目的在于提出一种文件复制方法,该方法可以提高文件复制操作的效率。
本发明的另一个目的在于提出一种文件复制装置。
为达到上述目的,本发明第一方面实施例提出的文件复制方法,包括:确定需要复制的文件;获取所述需要复制的文件的大小;根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
本发明第一方面实施例提出的文件复制方法,通过根据文件大小在不同的系统层面对文件进行复制操作,可以避免单一在应用层进行复制操作时产生的效率较低问题,提高文件复制操作的效率。
为达到上述目的,本发明第二方面实施例提出的文件复制装置,包括:确定模块,用于确定需要复制的文件;获取模块,用于获取所述需要复制的文件的大小;复制模块,用于根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
本发明第二方面实施例提出的文件复制装置,通过根据文件大小在不同的系统层面对文件进行复制操作,可以避免单一在应用层进行复制操作时产生的效率较低问题,提高文件复制操作的效率。
为达到上述目的,本发明第三方面实施例提出的移动设备,包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为移动设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:确定需要复制的文件;获取所述需要复制的文件的大小;根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
本发明第三方面实施例提出的移动设备,通过根据文件大小在不同的系统层面对文件进行复制操作,可以避免单一在应用层进行复制操作时产生的效率较低问题,提高文件复制操作的效率。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明一实施例提出的文件复制方法的流程示意图;
图2是本发明另一实施例提出的文件复制方法的流程示意图;
图3是本发明实施例中S23的一种实现流程示意图;
图4是本发明另一实施例提出的文件复制装置的结构示意图;
图5是本发明另一实施例提出的文件复制装置的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
图1是本发明一实施例提出的文件复制方法的流程示意图,该方法包括:
S11:确定需要复制的文件;
用户在需要复制操作时,可以选择菜单栏中的复制功能项或者采用快捷键进行复制操作,系统根据用户的选择指令或者输入的快捷键信号可以确定需要复制的文件。
具体的,系统可以接收用户发送的对选择的文件的复制指令,将复制指令对应的用户选择的文件确定为需要复制的文件。其中,复制指令包括对菜单栏中的复制功能的选择指令,或者,表明进行复制操作的快捷键信号。
进一步的,当系统确定需要复制的文件后,可以记录需要复制的文件的信息,例如记录需要复制的文件的源地址路径。
S12:获取所述需要复制的文件的大小。
其中,在不同的系统下可以调用不同的函数获取文件的大小。以Android系统为例,例如,可以调用stat类的getFileSize获取文件大小。当然,可以理解的是,也可以采用其他方式获取文件大小,具体可以采用已有的相应系统下获取文件大小的流程。
S13:根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
其中,以Android系统为例,系统层面可以包括应用层、中间层和核心层,具体的,应用层可以包括应用程序(applications)和应用程序框架(application framework),中间层可以包括类库(libraries)和android运行时(android runtime),核心层(linuxkernel)可以具体是指操作系统(operation system,OS)。
通常来讲,应用层采用java代码实现,核心层采用c代码实现,c代码包括c和c++。
相关技术中,由于复制操作是在应用层进行,当文件较大时会效率比较低,而本实施例中,将根据文件大小在不同系统层面进行复制操作。
具体的,所述根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,包括:
判断所述需要复制的文件的大小是否大于预设阈值;
当大于所述预设阈值时,在核心层对所述需要复制的文件进行复制操作;当小于或等于所述预设阈值时,在应用层对所述需要复制的文件进行复制操作。
例如,预设阈值时5M,当需要复制的文件的大小大于5M时,在核心层进行复制操作,而小于或等于5M时,在应用层进行复制操作。
进一步的,需要复制的文件可以位于应用层。具体的,在确定需要复制操作时,可以先获取要复制的文件的源地址路径以及要复制到的目标地址路径,之后,应用层可以向核心层发送复制指令,复制指令中包含要复制的文件的源地址路径和复制到的目标地址路径。
核心层接收到复制指令后,可以根据复制指令中包含的源地址路径获取要复制的文件,之后在核心层完成复制操作,并将复制后的文件存入目标地址路径指定的位置。
具体的,核心层可以将要复制的文件分为至少两个文件单元,且核心层可以创建线程池,线程池中包括至少两个线程,在进行复制操作时,每个线程对一个文件单元进行复制操作。进一步的,多个线程之间可以采用并行方式进行处理。
可选的,核心层处理的要复制的文件可以是大小大于预设阈值的文件,例如大于5M的文件。
核心层在对文件进行划分时,可以将每个文件单元设置为小于预设阈值,例如,将文件划分为多个文件单元,每个文件单元小于5M。可选的,核心层可以均匀划分,即每个文件单元的大小相同,例如,划分得到多个文件单元,每个文件单元是3M;或者,划分时也可以设置每个文件单元的大小不同,但每个文件单元的大小小于预设阈值,例如,划分得到多个文件单元,一个文件单元是3M,另一个文件单元是2M等。
进一步的,当线程池中的线程的个数小于文件单元的个数时,每个线程可以处理多个文件单元,例如,第一线程对一个文件单元进行复制操作,并在完成后,等待新的任务,当存在没有处理的文件单元时,该第一线程还可以对没有处理的文件单元中的一个文件单元再次进行复制操作。依此类推,通过线程池中的线程完成对所有文件单元的复制操作。
本实施例通过根据文件大小在不同的系统层面对文件进行复制操作,可以避免单一在应用层进行复制操作时产生的效率较低问题,提高文件复制操作的效率。
图2是本发明另一实施例提出的文件复制方法的流程示意图,该方法包括:
S21:确定需要复制的文件。
本实施例提出的方法所在的平台可以是具有Android系统的手机等移动设备。
Android系统可以根据用户输入的指令判断用户是否进行复制操作,例如,Android系统根据用户输入的对菜单的选择信号或者选择的快捷键的信号等确定用户是否需要进行复制操作。
当Android系统确定用户选择了复制菜单,或者选择了复制操作对应的快捷键,可以确定用户需要进行复制操作。再根据用户需要进行复制操作时选中的文件,确定需要复制的文件。
S22:判断该需要复制的文件的大小是否大于预设阈值,若是,执行S23,否则,执行S24。
其中,预设阈值可以是5M。
不同系统可以调用该系统配置的用于获取文件大小的函数来获取需要复制的文件的大小,例如,在Android系统中可以调用stat类的getFileSize函数获取要复制的文件的大小。
S23:在核心层采用多线程完成复制操作。
具体的,应用层可以采用java代码实现,核心层可以采用c代码实现,以应用层用java层表示,核心层用c代码层表示为例,参见图3,S23可以具体包括:
S31:java层向c代码层发送复制指令,复制指令中包含要复制的文件的源地址路径和目标地址路径。
S32:c代码层根据源地址路径获取要复制的文件,并将要复制的文件划分为至少两个文件单元。
其中,每个文件单元的大小可以预先设置,每个文件单元的大小小于预设阈值,例如小于5M。
S33:c代码层判断是否完成线程池的初始化,若是,执行35,否则执行S34。
S34:c代码层创建线程池,并完成初始化。
其中,线程池中包括的线程的个数可以预先设置,例如,预设设置包括3个线程,则可以创建一个包括3个线程的线程池。
其中,S32与S33-S34无时序限制关系,即可以先划分文件单元或者也可以先创建线程池。
S35:由线程池中一个线程对一个文件单元进行复制操作。
具体的,可以将每个文件单元作为一个复制任务添加到线程池中,线程池中的空闲线程收到任务后就会对文件单元进行复制操作。其中,在复制任务中还可以包括目标地址路径,以便将文件单元复制到目标地址路径指定的位置。
进一步的,多个线程之间可以采用并行方式进行复制操作,以提高效率。
S36:线程池中的每个线程完成一次复制任务后,等待新的复制任务。
例如,划分得到5个文件单元,而创建的线程池中包括3个线程,当这三个线程分别对一个文件单元进行复制操作后,其中的两个线程还可以再次对剩余的两个文件单元进行复制操作,以完成对所有文件单元的复制操作,得到完整的复制后的文件。
其中,线程在获取新的复制任务后可以重复执行S35-S36,直至所有的文件单元都完成复制操作。
S24:在应用层完成复制操作。
例如,在应用层调用应用程序编程接口(Application Programming Interface,API)完成复制操作。
由于文件较小时,在应用层也可以保证文件复制的效率,因此可以直接在应用层进行处理,降低需要在核心层处理时的流程繁琐度。
本实施例通过文件大于预设阈值时在核心层完成文件复制操作,可以大大提高文件在Android手机上的复制效率,可以提高对IO接口的占用率,从而减少复制时间,可以减少函数的异常处理点,提高复制效率。本实施例通过多线程并行处理可以进一步降低复制时间,提高复制效率。
图4是本发明另一实施例提出的文件复制装置的结构示意图,该装置40包括确定模块41、获取模块42和复制模块43。
确定模块41用于确定需要复制的文件;
用户在需要复制操作时,可以选择菜单栏中的复制功能项或者采用快捷键进行复制操作,系统根据用户的选择指令或者输入的快捷键信号可以确定需要复制的文件。
具体的,系统可以接收用户发送的对选择的文件的复制指令,将复制指令对应的用户选择的文件确定为需要复制的文件。其中,复制指令包括对菜单栏中的复制功能的选择指令,或者,表明进行复制操作的快捷键信号。
进一步的,当系统确定需要复制的文件后,可以记录需要复制的文件的信息,例如记录需要复制的文件的源地址路径。
本实施例提出的方法所在的平台可以是具有Android系统的手机等移动设备。
Android系统可以根据用户输入的指令判断用户是否进行复制操作,例如,Android系统根据用户输入的对菜单的选择信号或者选择的快捷键的信号等确定用户是否需要进行复制操作。
当Android系统确定用户选择了复制菜单,或者选择了复制操作对应的快捷键,可以确定用户需要进行复制操作。再根据用户需要进行复制操作时选中的文件,确定需要复制的文件。
获取模块42用于获取所述需要复制的文件的大小。
其中,在不同的系统下可以调用不同的函数获取文件的大小。以Android系统为例,例如,可以调用stat类的getFileSize获取文件大小。当然,可以理解的是,也可以采用其他方式获取文件大小,具体可以采用已有的相应系统下获取文件大小的流程。
复制模块43用于根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
其中,以Android系统为例,系统层面可以包括应用层、中间层和核心层,具体的,应用层可以包括应用程序(applications)和应用程序框架(application framework),中间层可以包括类库(libraries)和android运行时(android runtime),核心层(linuxkernel)可以具体是指操作系统(operation system,OS)。
通常来讲,应用层采用java代码实现,核心层采用c代码实现,c代码包括c和c++。
相关技术中,由于复制操作是在应用层进行,当文件较大时会效率比较低,而本实施例中,将根据文件大小在不同系统层面进行复制操作。
具体的,所述根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,包括:
判断所述需要复制的文件的大小是否大于预设阈值;
当大于所述预设阈值时,在核心层对所述需要复制的文件进行复制操作;当小于或等于所述预设阈值时,在应用层对所述需要复制的文件进行复制操作。
例如,预设阈值时5M,当需要复制的文件的大小大于5M时,在核心层进行复制操作,而小于或等于5M时,在应用层进行复制操作。
进一步的,需要复制的文件可以位于应用层。具体的,在确定需要复制操作时,可以先获取要复制的文件的源地址路径以及要复制到的目标地址路径,之后,应用层可以向核心层发送复制指令,复制指令中包含要复制的文件的源地址路径和复制到的目标地址路径。
核心层接收到复制指令后,可以根据复制指令中包含的源地址路径获取要复制的文件,之后在核心层完成复制操作,并将复制后的文件存入目标地址路径指定的位置。
具体的,核心层可以将要复制的文件分为至少两个文件单元,且核心层可以创建线程池,线程池中包括至少两个线程,在进行复制操作时,每个线程对一个文件单元进行复制操作。进一步的,多个线程之间可以采用并行方式进行处理。
可选的,核心层处理的要复制的文件可以是大小大于预设阈值的文件,例如大于5M的文件。
核心层在对文件进行划分时,可以将每个文件单元设置为小于预设阈值,例如,将文件划分为多个文件单元,每个文件单元小于5M。可选的,核心层可以均匀划分,即每个文件单元的大小相同,例如,划分得到多个文件单元,每个文件单元是3M;或者,划分时也可以设置每个文件单元的大小不同,但每个文件单元的大小小于预设阈值,例如,划分得到多个文件单元,一个文件单元是3M,另一个文件单元是2M等。
进一步的,当线程池中的线程的个数小于文件单元的个数时,每个线程可以处理多个文件单元,例如,第一线程对一个文件单元进行复制操作,并在完成后,等待新的任务,当存在没有处理的文件单元时,该第一线程还可以对没有处理的文件单元中的一个文件单元再次进行复制操作。依此类推,通过线程池中的线程完成对所有文件单元的复制操作。
一个实施例中,参见图5,复制模块43包括:第一单元431、第二单元432和第三单元433。
第一单元431用于判断所述需要复制的文件的大小是否大于预设阈值;其中,预设阈值可以是5M。
第二单元432用于当大于所述预设阈值时,在核心层对所述需要复制的文件进行复制操作;
所述第二单元432具体用于:
在核心层中将所述要复制的文件分为至少两个文件单元,每个文件单元的大小小于所述预设阈值;
采用在核心层中预先完成初始化的线程池中的每个线程对一个文件单元进行复制操作。
第三单元433用于当小于或等于所述预设阈值时,在应用层对所述需要复制的文件进行复制操作。例如,在应用层调用应用程序编程接口(Application Programming Interface,API)完成复制操作。
一个实施例中,所述第二单元432具体用于:采用并行方式,每个线程对一个文件单元进行复制操作。
一个实施例中,所述第二单元432具体用于:当所述文件单元的个数大于所述线程池中线程的个数时,每个线程对一个文件单元进行复制操作,并在完成对一个文件单元的复制操作后,再次对新的文件单元进行复制操作直至所有文件单元都完成复制操作。
例如,划分得到5个文件单元,而创建的线程池中包括3个线程,当这三个线程分别对一个文件单元进行复制操作后,其中的两个线程还可以再次对剩余的两个文件单元进行复制操作,以完成对所有文件单元的复制操作,得到完整的复制后的文件。
一个实施例中,所述第二单元432还用于:接收所述应用层发送的复制指令,以便在接收到所述复制指令后,在核心层中对所述需要复制的文件进行复制操作。
所述第二单元432还用于:判断在所述第二层中是否存在完成初始化的线程池,并在不存在时,建立线程池,并对所述线程池进行初始化,所述线程池中包括预设个数的线程。
其中,线程池中包括的线程的个数可以预先设置,例如,预设设置包括3个线程,则可以创建一个包括3个线程的线程池。
本实施例通过文件大于预设阈值时在核心层完成文件复制操作,可以大大提高文件在Android手机上的复制效率,可以提高对IO接口的占用率,从而减少复制时间,可以减少函数的异常处理点,提高复制效率。本实施例通过多线程并行处理可以进一步降低复制时间,提高复制效率。
本发明实施例还提供了一种移动设备,该移动设备包括壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为移动设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:
S11’:确定需要复制的文件;
用户在需要复制操作时,可以选择菜单栏中的复制功能项或者采用快捷键进行复制操作,系统根据用户的选择指令或者输入的快捷键信号可以确定需要复制的文件。
具体的,系统可以接收用户发送的对选择的文件的复制指令,将复制指令对应的用户选择的文件确定为需要复制的文件。其中,复制指令包括对菜单栏中的复制功能的选择指令,或者,表明进行复制操作的快捷键信号。
进一步的,当系统确定需要复制的文件后,可以记录需要复制的文件的信息,例如记录需要复制的文件的源地址路径。
S12’:获取所述需要复制的文件的大小。
其中,在不同的系统下可以调用不同的函数获取文件的大小。以Android系统为例,例如,可以调用stat类的getFileSize获取文件大小。当然,可以理解的是,也可以采用其他方式获取文件大小,具体可以采用已有的相应系统下获取文件大小的流程。
S13’:根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
其中,以Android系统为例,系统层面可以包括应用层、中间层和核心层,具体的,应用层可以包括应用程序(applications)和应用程序框架(application framework),中间层可以包括类库(libraries)和android运行时(android runtime),核心层(linuxkernel)可以具体是指操作系统(operation system,OS)。
通常来讲,应用层采用java代码实现,核心层采用c代码实现,c代码包括c和c++。
相关技术中,由于复制操作是在应用层进行,当文件较大时会效率比较低,而本实施例中,将根据文件大小在不同系统层面进行复制操作。
具体的,所述根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,包括:
判断所述需要复制的文件的大小是否大于预设阈值;
当大于所述预设阈值时,在核心层对所述需要复制的文件进行复制操作;当小于或等于所述预设阈值时,在应用层对所述需要复制的文件进行复制操作。
例如,预设阈值时5M,当需要复制的文件的大小大于5M时,在核心层进行复制操作,而小于或等于5M时,在应用层进行复制操作。
进一步的,需要复制的文件可以位于应用层。具体的,在确定需要复制操作时,可以先获取要复制的文件的源地址路径以及要复制到的目标地址路径,之后,应用层可以向核心层发送复制指令,复制指令中包含要复制的文件的源地址路径和复制到的目标地址路径。
核心层接收到复制指令后,可以根据复制指令中包含的源地址路径获取要复制的文件,之后在核心层完成复制操作,并将复制后的文件存入目标地址路径指定的位置。
具体的,核心层可以将要复制的文件分为至少两个文件单元,且核心层可以创建线程池,线程池中包括至少两个线程,在进行复制操作时,每个线程对一个文件单元进行复制操作。进一步的,多个线程之间可以采用并行方式进行处理。
可选的,核心层处理的要复制的文件可以是大小大于预设阈值的文件,例如大于5M的文件。
核心层在对文件进行划分时,可以将每个文件单元设置为小于预设阈值,例如,将文件划分为多个文件单元,每个文件单元小于5M。可选的,核心层可以均匀划分,即每个文件单元的大小相同,例如,划分得到多个文件单元,每个文件单元是3M;或者,划分时也可以设置每个文件单元的大小不同,但每个文件单元的大小小于预设阈值,例如,划分得到多个文件单元,一个文件单元是3M,另一个文件单元是2M等。
进一步的,当线程池中的线程的个数小于文件单元的个数时,每个线程可以处理多个文件单元,例如,第一线程对一个文件单元进行复制操作,并在完成后,等待新的任务,当存在没有处理的文件单元时,该第一线程还可以对没有处理的文件单元中的一个文件单元再次进行复制操作。依此类推,通过线程池中的线程完成对所有文件单元的复制操作。
本实施例通过根据文件大小在不同的系统层面对文件进行复制操作,可以避免单一在应用层进行复制操作时产生的效率较低问题,提高文件复制操作的效率。
另一实施例中,处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:
S21’:确定需要复制的文件。
本实施例提出的方法所在的平台可以是具有Android系统的手机等移动设备。
Android系统可以根据用户输入的指令判断用户是否进行复制操作,例如,Android系统根据用户输入的对菜单的选择信号或者选择的快捷键的信号等确定用户是否需要进行复制操作。
当Android系统确定用户选择了复制菜单,或者选择了复制操作对应的快捷键,可以确定用户需要进行复制操作。再根据用户需要进行复制操作时选中的文件,确定需要复制的文件。
S22’:判断该需要复制的文件的大小是否大于预设阈值,若是,执行S23’,否则,执行S24’。
其中,预设阈值可以是5M。
不同系统可以调用该系统配置的用于获取文件大小的函数来获取需要复制的文件的大小,例如,在Android系统中可以调用stat类的getFileSize函数获取要复制的文件的大小。
S23’:在核心层采用多线程完成复制操作。
具体的,应用层可以采用java代码实现,核心层可以采用c代码实现,以应用层用java层表示,核心层用c代码层表示为例,参见图3,S23可以具体包括:
S31’:java层向c代码层发送复制指令,复制指令中包含要复制的文件的源地址路径和目标地址路径。
S32’:c代码层根据源地址路径获取要复制的文件,并将要复制的文件划分为至少两个文件单元。
其中,每个文件单元的大小可以预先设置,每个文件单元的大小小于预设阈值,例如小于5M。
S33’:c代码层判断是否完成线程池的初始化,若是,执行35’,否则执行S34’。
S34’:c代码层创建线程池,并完成初始化。
其中,线程池中包括的线程的个数可以预先设置,例如,预设设置包括3个线程,则可以创建一个包括3个线程的线程池。
其中,S32’与S33’-S34’无时序限制关系,即可以先划分文件单元或者也可以先创建线程池。
S35’:由线程池中一个线程对一个文件单元进行复制操作。
具体的,可以将每个文件单元作为一个复制任务添加到线程池中,线程池中的空闲线程收到任务后就会对文件单元进行复制操作。其中,在复制任务中还可以包括目标地址路径,以便将文件单元复制到目标地址路径指定的位置。
进一步的,多个线程之间可以采用并行方式进行复制操作,以提高效率。
S36’:线程池中的每个线程完成一次复制任务后,等待新的复制任务。
例如,划分得到5个文件单元,而创建的线程池中包括3个线程,当这三个线程分别对一个文件单元进行复制操作后,其中的两个线程还可以再次对剩余的两个文件单元进行复制操作,以完成对所有文件单元的复制操作,得到完整的复制后的文件。
其中,线程在获取新的复制任务后可以重复执行S35-S36,直至所有的文件单元都完成复制操作。
S24’:在应用层完成复制操作。
例如,在应用层调用应用程序编程接口(Application Programming Interface,API)完成复制操作。
由于文件较小时,在应用层也可以保证文件复制的效率,因此可以直接在应用层进行处理,降低需要在核心层处理时的流程繁琐度。
本实施例通过文件大于预设阈值时在核心层完成文件复制操作,可以大大提高文件在Android手机上的复制效率,可以提高对IO接口的占用率,从而减少复制时间,可以减少函数的异常处理点,提高复制效率。本实施例通过多线程并行处理可以进一步降低复制时间,提高复制效率。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (21)
1.一种文件复制方法,其特征在于,包括:
确定需要复制的文件;
获取所述需要复制的文件的大小;
根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
2.根据权利要求1所述的方法,其特征在于,所述根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,包括:
判断所述需要复制的文件的大小是否大于预设阈值;
当大于所述预设阈值时,在核心层对所述需要复制的文件进行复制操作;
当小于或等于所述预设阈值时,在应用层对所述需要复制的文件进行复制操作。
3.根据权利要求2所述的方法,其特征在于,所述预设阈值是5M。
4.根据权利要求2所述的方法,其特征在于,所述在核心层对所述需要复制的文件进行复制操作,包括:
在核心层中将所述要复制的文件分为至少两个文件单元,每个文件单元的大小小于所述预设阈值;
采用在核心层中预先完成初始化的线程池中的每个线程对一个文件单元进行复制操作。
5.根据权利要求4所述的方法,其特征在于,所述每个线程对一个文件单元进行复制操作,包括:
采用并行方式,每个线程对一个文件单元进行复制操作。
6.根据权利要求4所述的方法,其特征在于,所述每个线程对一个文件单元进行复制操作,包括:
当所述文件单元的个数大于所述线程池中线程的个数时,每个线程对一个文件单元进行复制操作,并在完成对一个文件单元的复制操作后,再次对新的文件单元进行复制操作直至所有文件单元都完成复制操作。
7.根据权利要求4所述的方法,其特征在于,所述在核心层中对所述需要复制的文件进行复制操作之前,所述方法还包括:
所述核心层接收所述应用层发送的复制指令,以便在接收到所述复制指令后,在核心层中对所述需要复制的文件进行复制操作。
8.根据权利要求7所述的方法,其特征在于,所述接收所述复制指令之后,所述方法还包括:
判断在所述核心层中是否存在完成初始化的线程池,并在不存在时,建立线程池,并对所述线程池进行初始化,所述线程池中包括预设个数的线程。
9.根据权利要求8所述的方法,其特征在于,所述预设个数是3。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述应用层采用java代码实现,所述核心层采用c代码实现。
11.一种文件复制装置,其特征在于,包括:
确定模块,用于确定需要复制的文件;
获取模块,用于获取所述需要复制的文件的大小;
复制模块,用于根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
12.根据权利要求11所述的装置,其特征在于,所述复制模块包括:
第一单元,用于判断所述需要复制的文件的大小是否大于预设阈值;
第二单元,用于当大于所述预设阈值时,在核心层对所述需要复制的文件进行复制操作;
第三单元,用于当小于或等于所述预设阈值时,在应用层对所述需要复制的文件进行复制操作。
13.根据权利要求12所述的装置,其特征在于,所述第一单元采用的所述预设阈值是5M。
14.根据权利要求12所述的装置,其特征在于,所述第二单元具体用于:
在核心层中将所述要复制的文件分为至少两个文件单元,每个文件单元的大小小于所述预设阈值;
采用在核心层中预先完成初始化的线程池中的每个线程对一个文件单元进行复制操作。
15.根据权利要求14所述的装置,其特征在于,所述第二单元具体用于:
采用并行方式,每个线程对一个文件单元进行复制操作。
16.根据权利要求14所述的装置,其特征在于,所述第二单元具体用于:
当所述文件单元的个数大于所述线程池中线程的个数时,每个线程对一个文件单元进行复制操作,并在完成对一个文件单元的复制操作后,再次对新的文件单元进行复制操作直至所有文件单元都完成复制操作。
17.根据权利要求14所述的装置,其特征在于,所述第二单元还用于:
接收所述应用层发送的复制指令,以便在接收到所述复制指令后,在核心层中对所述需要复制的文件进行复制操作。
18.根据权利要求17所述的装置,其特征在于,所述第二单元还用于:
判断在所述第二层中是否存在完成初始化的线程池,并在不存在时,建立线程池,并对所述线程池进行初始化,所述线程池中包括预设个数的线程。
19.根据权利要求18所述的装置,其特征在于,所述预设个数是3。
20.根据权利要求11至19任一项所述的装置,其特征在于,所述应用层采用java代码实现,所述核心层采用c代码实现。
21.一种移动设备,其特征在于,包括壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为移动设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:
确定需要复制的文件;
获取所述需要复制的文件的大小;
根据所述需要复制的文件的大小,在不同的系统层面对所述需要复制的文件进行复制操作,所述不同的系统层面包括:应用层或者核心层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410309788.4A CN104133846B (zh) | 2014-06-30 | 2014-06-30 | 文件复制方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410309788.4A CN104133846B (zh) | 2014-06-30 | 2014-06-30 | 文件复制方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104133846A true CN104133846A (zh) | 2014-11-05 |
CN104133846B CN104133846B (zh) | 2017-11-07 |
Family
ID=51806524
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410309788.4A Active CN104133846B (zh) | 2014-06-30 | 2014-06-30 | 文件复制方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104133846B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765849A (zh) * | 2015-04-20 | 2015-07-08 | 三星电子(中国)研发中心 | 一种获取拷贝数据来源信息的方法和系统 |
CN106168905A (zh) * | 2016-07-21 | 2016-11-30 | 北京奇虎科技有限公司 | 一种移动终端中的文本处理方法、装置和移动终端 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1606011A (zh) * | 2003-10-07 | 2005-04-13 | 国际商业机器公司 | 用于处理文件请求的方法和系统 |
US20100191707A1 (en) * | 2009-01-23 | 2010-07-29 | Microsoft Corporation | Techniques for facilitating copy creation |
US7984023B2 (en) * | 2007-10-04 | 2011-07-19 | International Business Machines Corporation | Method and utility for copying files from a faulty disk |
-
2014
- 2014-06-30 CN CN201410309788.4A patent/CN104133846B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1606011A (zh) * | 2003-10-07 | 2005-04-13 | 国际商业机器公司 | 用于处理文件请求的方法和系统 |
US7984023B2 (en) * | 2007-10-04 | 2011-07-19 | International Business Machines Corporation | Method and utility for copying files from a faulty disk |
US20100191707A1 (en) * | 2009-01-23 | 2010-07-29 | Microsoft Corporation | Techniques for facilitating copy creation |
Non-Patent Citations (2)
Title |
---|
孤独的孤独: ""Android虚拟机效率问题"", 《HTTP://G0UG0U.BLOG.51CTO.COM/384871/407207》 * |
标叔: "Java多线程复制文件(转)", 《HTTP://BLOG.CSDN.NET/YOUSHINI/ARTICLE/DETAILS/6488205》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765849A (zh) * | 2015-04-20 | 2015-07-08 | 三星电子(中国)研发中心 | 一种获取拷贝数据来源信息的方法和系统 |
CN106168905A (zh) * | 2016-07-21 | 2016-11-30 | 北京奇虎科技有限公司 | 一种移动终端中的文本处理方法、装置和移动终端 |
Also Published As
Publication number | Publication date |
---|---|
CN104133846B (zh) | 2017-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10216509B2 (en) | Continuous and automatic application development and deployment | |
CN106970873B (zh) | 线上mock测试方法、装置及系统 | |
CN110335041B (zh) | 智能合约调用的一致性检测方法、装置、设备及存储介质 | |
CN103530156A (zh) | 动态加载和调用程序的方法及装置 | |
CA2821522A1 (en) | Method for checkpointing and restoring program state | |
EP2356562A1 (en) | Developing applications at runtime | |
CN107203465B (zh) | 系统接口测试方法及装置 | |
US20060190933A1 (en) | Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework | |
US9304838B1 (en) | Scheduling and executing model components in response to un-modeled events detected during an execution of the model | |
CN109947643B (zh) | 一种基于a/b测试的实验方案的配置方法、装置及设备 | |
US9965295B2 (en) | Creating a custom series of commands | |
CN112379940B (zh) | 一种可执行文件处理方法、装置、电子设备及存储介质 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
JP5733239B2 (ja) | アプリケーション実行方法及び実行装置 | |
CN110007935B (zh) | 一种程序升级的处理方法、装置及设备 | |
CN108304313B (zh) | 一种用于数据测试的装置、客户端及方法 | |
CN104050006A (zh) | 一种fpga的更新系统及其更新方法 | |
US9459883B2 (en) | Modifying disk images | |
US10459823B1 (en) | Debugging using dual container images | |
CN104133846A (zh) | 文件复制方法和装置 | |
CN114489927A (zh) | 一种解耦依赖文件的容器部署方法及系统 | |
CN106293790A (zh) | 基于Firefox操作系统的应用程序升级方法和装置 | |
CN105630530A (zh) | 数字信号处理器多级启动方法及系统 | |
CN102298531B (zh) | 在嵌入式系统中对闪存文件系统进行升级的方法 | |
CN107402749B (zh) | 实现图片加载库的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20181213 Address after: 519030 Room 105-53811, No. 6 Baohua Road, Hengqin New District, Zhuhai City, Guangdong Province Patentee after: Zhuhai Seal Interest Technology Co., Ltd. Address before: 519070, six level 601F, 10 main building, science and technology road, Tangjia Bay Town, Zhuhai, Guangdong. Patentee before: Zhuhai Juntian Electronic Technology Co.,Ltd. |