私は、ZIPファイルの途中からファイルを取得するための(速度の点で)最も効率的な方法を探しています。
たとえば、700個のフォルダ(1から700のタグが付いている)を含むZIPファイルがあります。各フォルダは、画像とmp3ファイルに相当します。XMLファイルを含むInfoと呼ばれる特別なフォルダがあります。問題は、XMLファイルを見つけるためにこのZIPファイルを反復処理する必要があり、それから目的のフォルダーからの画像を表示していることです。私はZipFileアプローチを使用しています(したがって、ZIPファイル全体を反復処理しています。フォルダー666が必要な場合でも、ZIPファイル内の665項目を処理する必要があります)->ZIPファイルからの選択は非常に遅いです。
同様の問題に直面した場合、どのように解決しましたか?私のZIPファイルを仮想フォルダに変えてはるかに速く閲覧するJavaのアプローチはありますか?時間的に最も効率的な外部ライブラリはありますか?
ソースコードスニペット:
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++;
}
}
}
}