我想要完成的是以下内容:假设我有一个将图像写入File目录(SD或内部缓存)的函数。在写出文件之后,我会检查我的图像目录是否在某个总文件大小内(现在,我正在使用这个function递归计算目录的文件大小)。如果我刚刚添加的文件使该目录太大,那么我想要做的就是继续删除旧文件,直到我们刚好低于最大文件大小。
我在考虑首先从最早的文件目录成员中排序(通过比较器,使用此example按升序排序),然后将数组转换为ArrayList以获取其Iterator,然后我们的目录文件大小为仍然高于最大文件大小,我仍然有文件迭代,我删除旧文件,直到我打破那个while循环。有没有更有效的方法来实现这个目标?
答案 0 :(得分:1)
你的瓶颈很可能是文件系统操作(即:读取目录内容和删除文件),而不是内存操作,所以你可能不应该过多担心后者的效率只要你不做一些非常低效的事情。
你描述的粗略算法听起来不错。您只需执行以下操作即可避免ArrayList转换:
for (Pair pair : pairs) {
if (totalSize <= maxSize) {
break;
}
totalSize -= pair.f.length();
pair.f.delete();
}