Assets大文件读取Assets.open Java heap space内存溢出问题

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

发布了63 篇原创文章 · 获赞 41 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/MarketAndTechnology/article/details/88994486
今日推荐