我目前正在编写一个应用程序,它读取我的资产文件夹中包含一堆图像的 zip 文件。我正在使用ZipInputStream
API 读取内容,然后将每个文件写入 my:Environment.getExternalStorageDirectory()
目录。我一切正常,但是第一次运行应用程序将图像写入存储目录时速度非常慢。将图像写入光盘大约需要 5 分钟。我的代码如下所示:
ZipEntry ze = null;
ZipInputStream zin = new ZipInputStream(getAssets().open("myFile.zip"));
String location = getExternalStorageDirectory().getAbsolutePath() + "/test/images/";
//Loop through the zip file
while ((ze = zin.getNextEntry()) != null) {
File f = new File(location + ze.getName());
//Doesn't exist? Create to avoid FileNotFoundException
if(f.exists()) {
f.createNewFile();
}
FileOutputStream fout = new FileOutputStream(f);
//Read contents and then write to file
for (c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
}
fout.close();
zin.close();
读取特定条目的内容然后写入它的过程非常缓慢。我假设它更多地与阅读而不是写作有关。我读过您可以使用byte[]
数组缓冲区来加快进程,但这似乎不起作用!我试过这个,但它只读取文件的一部分......
FileOutputStream fout = new FileOutputStream(f);
byte[] buffer = new byte[(int)ze.getSize()];
//Read contents and then write to file
for (c = zin.read(buffer); c != -1; c = zin.read(buffer)) {
fout.write(c);
}
}
当我这样做时,我只写了大约 600-800 个字节。有没有办法加快这个速度??我是否错误地实现了缓冲区数组?