缓存与数据存储哪个更适合下载内容?

11

我正在通过向服务器发出HTTP GET请求下载一些文本数据。如果已经下载了文件,则希望将其保存以便在请求时重复使用。但我希望保护我的数据私密性,以确保没有其他应用程序可以访问它。另一方面,如果磁盘空间不足,Android删除这些文件也是可以的。

因此,我的问题是 - 我应该将下载的内容存储在App数据文件夹还是缓存文件夹中?两者之间有什么区别吗?

首先,我曾经使用过将文件保存在App数据文件夹中的方法:

public void save(String fileName, String data) {
    FileOutputStream fos;
    try {
        fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE);
        fos.write(data.getBytes());
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

使用这种方法,我可以为我的文件设置私密模式,以便其他应用程序无法访问它们。但是当我考虑将文件移动到缓存目录时,我需要执行类似以下操作:

private void save(String filename, String data) {
    File cacheDir = new File(mContext.getCacheDir(), "app_directory");
    cacheDir.mkdir();
    try {
        FileOutputStream fos = new FileOutputStream(new File(cacheDir, filename));
        fos.write(data.getBytes());
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我不能再将文件设置为私有属性,因此,据我所知,任何应用程序都将能够访问我的数据。我是正确的吗?

也许有一种方法可以使缓存目录中的文件保持私密性?或者将文件保存在哪里并不重要?

2个回答

22

无论是CacheDir还是FilesDir,它们都是特定于应用程序的,并且无法被其他应用程序访问。

但是,如果用户已经root了他们的设备,则可以访问这两个目录中的文件。

CacheDir用于存储临时文件,如果需要通过Android OS释放空间,则可能会删除这些文件。除非应用程序明确这样做,否则FilesDir将不会被清除,或者只有在应用程序被卸载时才会被清除。


2
谢谢Matt,我想我会把它留在缓存中。 - Alexander Zhak

2
这在文档中有说明:

http://developer.android.com/guide/topics/data/data-storage.html

保存缓存文件

如果您想要缓存某些数据而不是永久存储它,您应该使用getCacheDir()打开一个文件,表示内部目录,应用程序应该将临时缓存文件保存在其中。

当设备的内部存储空间不足时,Android可能会删除这些缓存文件以恢复空间。但是,您不应该依赖系统来清理这些文件。您应始终自行维护缓存文件,并保持在合理的空间限制内,例如1MB。当用户卸载您的应用程序时,这些文件会被删除。

缓存中的数据只能通过您的应用程序访问(如果未rooted,但这是用户选择来最小化安全性)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接