ZIPファイルを効率よく解凍するには?GCが起きて遅くなるのを解決したいです。

332 views
Skip to first unread message

crazycircuit7

unread,
Mar 14, 2012, 11:00:44 PM3/14/12
to android-g...@googlegroups.com
こんにちは
お世話になります。
PCで作った(deflate)ZIPファイルを効率よく解凍するにはいい方法がないでしょうか?
解凍はすぐ終わるが、GCが起きて遅くなるのを解決したい。
Heapメモリが8MBを超えそうになってGCが走り待たされる状況です。

ZipFile zipFile = new ZipFile(zipPath);
ここが一番メモリを食う原因ですが new するしかないですよね?

別ライブラリを使った方がメモリを食わないでしょうか?


import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

    // Zipファイル内のファイルを解凍する。
    public static int meltZipFile(String zipPath, String innerfile,String outFile) {
        try {

            // outFileのフォルダが無い時は作成する。
            File dir = new File(outFile);
            File dirpath_only = new File(dir.getParent());
            if (!dirpath_only.exists()) {
                dirpath_only.mkdirs();
            }
            dir = null;
            dirpath_only = null;

            ZipFile zipFile = new ZipFile(zipPath);
            ZipEntry entry = zipFile.getEntry(innerfile);
            InputStream is = zipFile.getInputStream(entry);

            OutputStream os = new FileOutputStream(outFile);

            byte[] buffer = new byte[1024];

            int r = 0;
            while (-1 != (r = is.read(buffer))) {
                os.write(buffer, 0, r);
            }

            os.close();
            is.close();
            zipFile.close();

            //開放する。
            os=null;
            is = null;
            entry =null;
            zipFile = null;
            buffer = null;

            return 0;
        } catch (Exception ex) {
            return -1;
        }
    }

ishihata

unread,
Mar 16, 2012, 1:01:16 AM3/16/12
to 日本Androidの会
こんにちは。石畑と申します。

自分でやったことはないので、ただの思いつきになってしまいますが、
NDKでzlibを直接使ってはいかがでしょうか。
どうやらNDKはzlibを標準で備えているらしいです。
(「zlib android」でググると出てきます)
Reply all
Reply to author
Forward
0 new messages