我正在寻找最有效的方法(在速度方面)从ZIP文件的中间检索一些文件.
例如,我有ZIP文件,其中包含700个文件夹(标记为1到700).每个文件夹等于图片和mp3文件.有一个名为Info的特殊文件夹,其中包含XML文件.问题是,我需要遍历此ZIP文件以查找XML文件,然后我将显示所需文件夹中的图像.我正在使用ZipFile方法(因此我正在遍历整个ZIP文件,即使我想要文件夹666,我需要浏览ZIP文件中的665项) - >从ZIP文件中选择是非常慢的.
我想问你,如果你遇到过类似的问题,你是怎么解决这个问题的?Java中是否有任何方法可以将我的ZIP文件转换为虚拟文件夹以便更快地浏览它?有没有外部库,这在时间上是最有效的?
源代码片段:
try {
FileInputStream fin = new FileInputStream(
"sdcard/external_sd/mtp_data/poi_data/data.zip");
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
// Log.d("ZE", ze.getName());
if (ze.getName().startsWith("body/665/")) {
// Log.d("FILE F", "soubor: "+ze.getName());
if (ze.getName().endsWith(".jpg")
|| ze.getName().endsWith(".JPG")) {
Log.d("OBR", "picture: " + ze.getName());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = zin.read(buffer)) != -1) {
baos.write(buffer, 0, count);
}
byte[] bytes = baos.toByteArray();
bmp = BitmapFactory.decodeByteArray(bytes, 0,
bytes.length);
photoField.add(bmp);
i++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该ZipFile.getEntry()和ZipFile.getInputStream()方法可用于访问特定文件的ZIP存档.例如:
ZipFile file = ...
ZipEntry entry = file.getEntry("folder1/picture.jpg");
InputStream in = file.getInputStream(entry);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |