★★Java質問・相談スレッド142★★
■ このスレッドは過去ログ倉庫に格納されています
0630デフォルトの名無しさん
2011/01/04(火) 23:48:16Android 開発を行ってますが、Android には関係ないと思うのでここで質問させて頂きたいです。
画像ファイルが複数入っている zip ファイルから、
指定のファイル(ファイル名で指定)のみを取り出して表示させようと思ってます。
FileInputStream fis = new FileInputStream(〜);
ZipInputStream zis = new ZipInputStream(fis);
for (ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry()) {
// もし指定のファイルなら表示して break
}
これで動作はするのですが、zip ファイルには3万を超えるファイルが入っており、
たまたま後ろの方にあるファイルを指定した場合、非常に時間がかかってしまいました。
そこで、C言語で言う ftell および fseek を使えば、
起動時に ftell でファイル名⇔ファイル位置のハッシュを作っておき(時間がかかりますが起動時に1回だけなので許容範囲としてます)、
表示時は fseek で一発で取り出せるのでは?と考えました。
ただ、ZipInputStream に fseek の代わりになりそうな skip というメソッドは見つかったのですが、
現在のポインタ位置を取得する ftell に当たるメソッドが見つかりません。
RandomAccessFile というクラスも見つけましたが、zip に使う方法が分からず…。
何かいい方法はないでしょうか。
長文で申し訳ありませんが、よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています