[
https://issues.apache.org/jira/browse/COMPRESS-291?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Bodewig resolved COMPRESS-291.
-------------------------------------
Resolution: Fixed
Fix Version/s: 1.11
we like to believe the combination of COMPRESS-333 and COMPRESS-340 has
improved the situation considerably.
> decompress .7z archive very very slow
> -------------------------------------
>
> Key: COMPRESS-291
> URL: https://issues.apache.org/jira/browse/COMPRESS-291
> Project: Commons Compress
> Issue Type: Improvement
> Components: Compressors
> Affects Versions: 1.9
> Environment: Windows 7 x64, jdk1.7.0_21 x64
> Reporter: Robert Jansen
> Priority: Minor
> Fix For: 1.11
>
>
> I have 7z archives with one large image and many small files. The following
> code decompresses to a directory and returns the largest file. It is
> glacially slow and not usable for GB size files:
> public File unSevenZipToDir(File sevenZipFile, File outputDir) {
>
> File imgFile = null;
> // Make sure output dir exists
> outputDir.mkdirs();
> if (outputDir.exists()) {
>
> //FileInputStream stream;
> try {
>
> FileOutputStream output = null;
> SevenZFile f7z = new SevenZFile(sevenZipFile);
> SevenZArchiveEntry entry;
> long maxSize = 0;
> while ((entry = f7z.getNextEntry()) != null) {
> if (entry != null) {
> String s = entry.getName();
> if (s != null) {
> long sz =
> entry.getSize();
>
> if (sz > 0) {
> int count;
> byte data[] =
> new byte[4096];
>
> String
> outFileName = outputDir.getPath() + "/"
>
> + new File(entry.getName()).getName();
>
>
>
>
>
>
>
>
>
>
>
>
>
> File outFile =
> new File(outFileName);
>
> // Extract only
> if it does not already exist
> if
> (outFile.exists() == false) {
>
> System.out.println("Extracting " + s + " => size = " + sz);
>
>
>
>
> FileOutputStream fos = new FileOutputStream(
>
> outFile);
>
>
>
> BufferedOutputStream dest = new BufferedOutputStream(
>
> fos);
>
> while
> ((count = f7z.read(data)) != -1) {
>
> dest.write(data, 0, count);
> }
>
>
> dest.flush();
>
> dest.close();
>
> } else {
>
> System.out.println("Using already Extracted " + s + " => size = " + sz);
> }
> if
> (s.endsWith(".h5") || s.endsWith(".tif") ||
>
> s.endsWith(".cos") || s.endsWith(".nitf")
>
> || s.endsWith(".ntf")
>
> || s.endsWith(".jpg") && sz > maxSize) {
> maxSize
> = sz;
> imgFile
> = new File(outFileName);
> }
> } // end sz > 0
> } // end s != null
> } // end if entry
> } // end while
> f7z.close();
> } catch (FileNotFoundException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> }
> return imgFile;
> }
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
