我在读从被设在我的Android资产文件夹使用一个ZIP文件的文件ZipInputStream
:它的工作原理,但它真的很慢,因为它有它使用顺序读取getNextEntry()
并且有相当多的文件。
如果我的ZIP文件复制到SD卡上,阅读是非常快当使用ZipFile.getEntry
,但我没有找到一种方法,使用ZipFile
与资产文件!
有什么办法来访问资源文件夹的ZIP以迅速的方式? 还是我真的有到ZIP复制到SD卡?
(顺便说一句,如果有人想知道为什么我这样做是:应用程序是大于50 MB,这样才能在Play商店我必须使用扩展的APK得到它;然而,这个应用程序还应该投入亚马逊应用商店,我必须使用另一个版本用于此,亚马逊不支持扩展的APK,自然...我想,在两个不同的位置访问的ZIP文件将处理这个简单的方法,但很可惜.. 。)
这对我的作品:
private void loadzip(String folder, InputStream inputStream) throws IOException
{
ZipInputStream zipIs = new ZipInputStream(inputStream);
ZipEntry ze = null;
while ((ze = zipIs.getNextEntry()) != null) {
FileOutputStream fout = new FileOutputStream(folder +"/"+ ze.getName());
byte[] buffer = new byte[1024];
int length = 0;
while ((length = zipIs.read(buffer))>0) {
fout.write(buffer, 0, length);
}
zipIs.closeEntry();
fout.close();
}
zipIs.close();
}
您可以直接资产存放未压缩的文件(即解压压缩到资产/文件夹)。 这样一来,就可以直接访问文件,当您建立APK他们无论如何都会被压缩。
您可以创建在以下方式ZipInputStream:
ZipInputStream zipIs = new ZipInputStream(context.getResources().openRawResource(your.package.com.R.raw.filename));
ZipEntry ze = null;
while ((ze = zipIs.getNextEntry()) != null) {
FileOutputStream fout = new FileOutputStream(FOLDER_NAME +"/"+ ze.getName());
byte[] buffer = new byte[1024];
int length = 0;
while ((length = zipIs.read(buffer))>0) {
fout.write(buffer, 0, length);
}
zipIs .closeEntry();
fout.close();
}
zipIs .close();