假设我有各种 text/json/xml/whatever 文件(本地存储在 assets 目录中),大小从 20 到 500 KB。假设这些文件将在整个应用程序中被频繁引用,最好是:
A)在第一次请求时读取文件一次,并将数据存储在变量中
或者
B)每次请求时读取文件,获取请求的信息,然后让GC清理?
来自web-dev,我通常使用选项(A),但我想知道移动设备的存储限制是否使B在这种情况下(Android应用程序开发)更受欢迎。
蒂亚。
您可以通过压缩将数据存储到内存中。它会在任何时候减少您的内存占用。因此该技术可以适用于PC和手机。稍后当您需要数据时,读取并解压缩它。所以读取文件一次,然后压缩并存储在内存中。下面的例子使用 GZIPOutputStream 压缩一个字符串。
public static String compress(String str){
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());
gzip.close();
return out.toString("ISO-8859-1");
}
这取决于文件的总大小、访问频率和您的目标客户。虽然高端手机的内存非常大,但内存较少的低端系统很多。它可能应该使用一些 LRU 缓存来达到平衡。
如果文件被频繁请求,肯定最好读取一次文件并存储在缓存中。
您还可以阅读这篇题为Google 如何教我在 HighScalability 网站中缓存和兑现的文章。