有时候在极端情况下,需要在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 效率没有那么高,但是可以读取大文件