有时候在极端情况下,需要在Assets里头放置特别大的文件,有可能达到上G。这个时候我们调用Assets.open 来打开这个文件有可能就会有内存溢出。究其原因是 为了更快的读取文件,减少IO操作,Assets.open 带用了底层 mmap,把文件映射到内存里面。过大的文件致使内存溢出。
这个时候我们可以考虑使用
context.getClass().getClassLoader().getResourceAsStream("assets/swcdwj.mp4") 的方法来获取,这个方法调用的是IO操作,可能效率上不如 Assets.open ,但是内存占用小可以读取非常大的文件。
所以总结为
1.Assets.open 可以读取小文件,而且效率高。
2.context.getClass().getClassLoader().getResourceAsStream 效率没有那么高,但是可以读取大文件
本文介绍了在Android开发中,如何处理Assets目录下过大文件的读取问题。当文件大小达到GB级别时,使用Assets.open可能会导致内存溢出。文中对比了Assets.open与context.getClass().getClassLoader().getResourceAsStream两种方法,并指出了它们各自的适用场景。
3786

被折叠的 条评论
为什么被折叠?



