【发布时间】:2011-12-15 09:28:05
【问题描述】:
我正在为 Android 2.2 开发。
默认情况下,放在资源和资产中的内容在 APK 中被压缩,除非它们的扩展名表明它们已经被压缩(mp3、png)。而且,在Android 2.3之前,assets只能放小于1MB的未压缩文件。
问题一:
如果我将一个 1.5MB 的二进制文件放到 res/raw 中,并且我的程序使用它的标准 Android ID (R.raw.....) 来引用它,那么系统会将 整个文件拉入记忆?由于 1.5MB 是以压缩方式存储的,我想它必须如此。这是不愉快的,因为程序可能只需要从给定的文件偏移量加载 1KB 的数据。这可能会对应用性能/速度产生严重影响。
我看到了两种解决方案:
- (hack) 使用 mp3 或 png 扩展名;但我不确定这是否允许内存高效访问(即 inputstream.skipbytes 等)
- 安装后,第一次启动应用程序时,应用程序会将文件复制到自己的可写工作文件夹(在SD卡中)。从那时起,它将始终从那里访问文件,而不是 R.raw... 方式。因此,顺序读取肯定会起作用,即内存使用量不会超过从指定文件偏移量读取的实际数据(除了 inputstream.seek 实现使用的临时读取缓冲区,这些缓冲区经过优化,即我想很小)。
问题 2:
从大文件中高效读取二进制数据的最佳方法是什么?我不想将我的大文件分成许多小文件,除非这是唯一的方法。
【问题讨论】:
标签: android performance memory-management binaryfiles