Android:将包含数千个文件的zip有效地从资产复制到内部存储

时间:2019-04-26 16:03:22

标签: android unzip android-assets

TL; DR:是否可以将包含数千个文件的zip文件从Android资产复制到内部存储,这比使用ZipInputStream效率更高?

我的Android应用有一些资产,在首次启动时需要将其复制到设备存储中。这些文件以zip文件存储在资产中,并按照here(在ZipInputStream方法中所述)通过unzip复制。一共有10个zip文件,总计36MB,解压缩/复制过程大约需要3秒钟。

问题:我需要添加39MB的新资产,但此过程大约需要30秒。我的直觉是这是因为该资产包含5500个文件(每个文件平均约7KB)。由于我需要启动时的资产,因此不能在后台服务中运行该资产,而且要花30秒钟以上的时间才能显示启动屏幕。

This post建议使用ZipFile而不是ZipInputStream,但正如here和其他S / O帖子所述,它似乎无法在Android中正常工作,我正在体验此处描述的ZipException相同(请注意,这是 之后,将zip文件复制到内部存储中-Android资产仅提供流而不是文件,因此必须先从资产复制zip,然后才能使用ZipFile方法使用)。

有没有更有效的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

不幸的是-不,写入每个文件包含3个主要操作:创建和打开文件进行写入,在文件中写入数据,关闭文件进行写入。复制这种数量文件的最快方法-将它们放在一个文件中,例如,二进制文件或sqlite数据库文件。或者,您可以找到一种直接从存档中读取的方法。请记住,您将无法从资产中删除此文件(至少我从未听说过解决方案),因此对我来说似乎没用。