0

我从网上下载了一个非常大的 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();
}
4

1 回答 1

3

您逐字节读取和写入数据。尝试一次读取和写入更多数据,而不是使用一些缓冲区。对于一个非常大的文件,一个字节一个字节的文件可能太多了,即使对于手机 SSD 来说也是如此,很多小尺寸的写入对于这些设备来说是最具挑战性的。

  byte buffer [] = new byte[2048];
  int n;
  while ( (n = in.read(buffer) > 0) {
    fos.write(buffer, 0, n);
  }
于 2013-02-20T19:34:01.717 回答