gpt4 book ai didi

android - 将 Zip 提取到 SD 卡非常慢。我如何优化性能?

转载 作者:可可西里 更新时间:2023-11-01 19:05:47 29 4
gpt4 key购买 nike

我的应用下载了一个包含大约 350 个文件的 zip。 JPG 和 HTML 文件的混合。我为它编写的函数工作得很好,但解压缩需要永远。起初我认为原因可能是写入 sd 卡很慢。但是当我用手机上的其他应用程序解压缩相同的 zip 时,它的运行速度要快得多。我可以做些什么来优化它吗?

代码如下:

private void extract() {

try {
FileInputStream inStream = new FileInputStream(targetFilePath);
ZipInputStream zipStream = new ZipInputStream(new BufferedInputStream(inStream));
ZipEntry entry;
ZipFile zip = new ZipFile(targetFilePath);

//i know the contents for the zip so i create the dirs i need in advance
new File(targetFolder).mkdirs();
new File(targetFolder + "META-INF").mkdir();
new File(targetFolder + "content").mkdir();

int extracted = 0;

while((entry = zipStream.getNextEntry()) != null) {
if (entry.isDirectory()) {
new File(targetFolder + entry.getName()).mkdirs();
} else {
FileOutputStream outStream = new FileOutputStream(targetFolder + entry.getName());
for (int c = zipStream.read(); c != -1; c = zipStream.read()) {
outStream.write(c);
}
zipStream.closeEntry();
outStream.close();

extracted ++;
}

publishProgress(""+(int)extracted*100/zip.size());
}

zipStream.close();
inStream.close();
//
new File(targetFilePath).delete();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

感谢 CommonsWare,我像这样修改了我的代码:

                    int size;
byte[] buffer = new byte[2048];

FileOutputStream outStream = new FileOutputStream(targetFolder + entry.getName());
BufferedOutputStream bufferOut = new BufferedOutputStream(outStream, buffer.length);

while((size = zipStream.read(buffer, 0, buffer.length)) != -1) {
bufferOut.write(buffer, 0, size);
}

bufferOut.flush();
bufferOut.close();

性能差异很大。非常感谢。

最佳答案

您一次读取和写入一个字节。考虑一次读写更大的 block 。

关于android - 将 Zip 提取到 SD 卡非常慢。我如何优化性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3975847/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com