【发布时间】:2013-02-20 19:23:30
【问题描述】:
我从网上下载了一个相当大的 zip 文件,然后想将它解压缩到我的应用程序的存储中。现在这需要相当长的时间,我想知道是否有任何关于如何加快速度的建议。我知道对于 SQLite 数据库,您可以通过调用 beginTransaction() 进行批量插入,并且想知道实际文件输出是否有类似的东西。到目前为止,这是我所得到的:
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is));
BufferedInputStream in = new BufferedInputStream(zis);
BufferedOutputStream bos;
byte buffer[] = new byte[8 * 1024];
int n;
try {
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null)
{
String name = ze.getName();
if (!ze.isDirectory() && !name.contains("MACOSX"))
{
name = prefix + ze.getName();
name = name.replace('/', '_');
bos = new BufferedOutputStream(mContext.openFileOutput(name, Context.MODE_PRIVATE));
while ((n = in.read(buffer)) > 0)
bos.write(buffer, 0, n);
Log.i("Update", name + " is saved to internal storage.");
zis.closeEntry();
bos.close();
}
}
} finally {
in.close();
zis.close();
}
【问题讨论】:
-
解压 Zip 文件意味着您从 zip 文件中解压数据并将单个文件写入磁盘,这主要取决于 I/O 速度和处理。我可能会得到纠正,但我不确定您是否可以在不增加实际 I/O 速度的情况下加快此过程。
标签: android performance zip fileoutputstream