【问题标题】:Cache vs Data storage for downloaded content下载内容的缓存与数据存储
【发布时间】:2013-11-15 17:25:39
【问题描述】:

我通过向服务器发出 HTTP GET 请求来下载一些文本数据。如果已经下载,我想保存下载的文本文件以根据要求重新使用它。但我想将我的数据保密,以便其他应用程序无法访问它。另一方面,如果没有足够的磁盘空间,Android 可以删除这些文件。

所以,我的问题是 - 我应该将下载的内容存储在 App Data 文件夹还是缓存文件夹中?两者有什么区别吗?

首先,我使用类似的方法将文件保存在 App Data 文件夹中

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();
    }
}

我无法再为我的文件设置 Private 属性,因此,据我所知,任何应用程序都可以访问我的数据。我说的对吗?

也许有办法将缓存目录中的文件设为私有?或者将文件保存到哪里并不重要?

【问题讨论】:

    标签: android storage


    【解决方案1】:

    CacheDirFilesDir 都是特定于应用程序的,不能被任何其他应用程序访问。

    但是,如果用户已经根植了他们的设备,则可以访问这两者。

    CacheDir 用于临时文件,如果需要,可以将其删除以释放 Android 操作系统的空间。除非应用、用户或应用已卸载,否则不会清除文件目录。

    【讨论】:

    • 谢谢马特,我想我会把它留在缓存中。
    【解决方案2】:

    这在文档中有介绍:

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

    保存缓存文件

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

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

    缓存中的数据只能访问您的应用程序(如果它没有root,但这是用户选择以最小化安全性)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2023-03-26
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多