You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中如何获取Asset文件大小?哪种方法更优?

Android Kotlin中获取Asset文件大小的最优方案

在Android Kotlin开发中,是可以获取Asset文件大小的,针对你提到的两种方法,以及更优方案分析如下:

两种现有方案的对比

1. context.assets.open("FILE").available()

这个方法的返回值是当前输入流中可无阻塞读取的字节数,并非文件的总大小。虽然在部分场景下它可能巧合返回正确的文件总大小,但这并非API的设计目标,官方文档明确说明它不保证返回文件的全部字节数,所以准确性无法保障,不建议依赖它来获取Asset文件的真实大小。

2. context.assets.open("FILE").readBytes().size

这个方法会将整个Asset文件读取到内存中,再通过字节数组的长度得到文件大小,准确性是有保障的,但存在明显弊端:如果Asset中的文件体积较大,一次性读入内存会占用大量RAM,极易引发内存溢出(OOM)异常,仅适合处理小体积的Asset文件。

更优的替代方案

推荐使用AssetManager.openFd()方法,通过文件描述符直接获取文件大小,既准确又不会占用过多内存:

fun getAssetFileSize(context: Context, fileName: String): Long {
    return try {
        context.assets.openFd(fileName).use { fd ->
            fd.length
        }
    } catch (e: IOException) {
        e.printStackTrace()
        0L
    }
}

这种方式通过获取Asset文件的文件描述符,直接读取文件的真实总长度,不需要加载整个文件到内存,内存效率更高,同时准确性完全有保障,适合所有大小的Asset文件。

总结

  • 若仅处理小体积Asset文件,readBytes().size可以使用,但要注意内存风险;
  • 无论文件大小,openFd()的方式都是准确且高效的最优选择;
  • available()因准确性无法保证,不推荐使用。

内容的提问来源于stack exchange,提问作者Tikhedewal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:05:21