What is the fastest way to extract 1 file from a zip file which contain a lot of file?

前端 未结 3 1577
忘掉有多难
忘掉有多难 2021-02-02 01:08

I tried the java.util.zip package, it is too slow.

Then I found LZMA SDK and 7z jbinding but they are also lacking something.

The LZMA SDK does not provide a ki

3条回答
  •  难免孤独
    2021-02-02 01:47

    Use a ZipFile rather than a ZipInputStream.

    Although the documentation does not indicate this (it's in the docs for JarFile), it should use random-access file operations to read the file. Since a ZIPfile contains a directory at a known location, this means a LOT less IO has to happen to find a particular file.

    Some caveats: to the best of my knowledge, the Sun implementation uses a memory-mapped file. This means that your virtual address space has to be large enough to hold the file as well as everything else in your JVM. Which may be a problem for a 32-bit server. On the other hand, it may be smart enough to avoid memory-mapping on 32-bit, or memory-map just the directory; I haven't tried.

    Also, if you're using multiple files, be sure to use a try/finally to ensure that the file is closed after use.

提交回复
热议问题