我从网上下载了一个非常大的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();
}
答案 0 :(得分:3)
您逐字节地读取和写入数据。尝试使用一些缓冲区来读取和写入更多数据。对于一个非常大的文件,字节的字节可能对于手机SSD来说太多了,很多小尺寸的写入对于这些设备来说是最具挑战性的。
byte buffer [] = new byte[2048];
int n;
while ( (n = in.read(buffer) > 0) {
fos.write(buffer, 0, n);
}