commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sascha Zorn (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (COMPRESS-291) decompress .7z archive very very slow
Date Mon, 12 Jan 2015 20:04:34 GMT

    [ https://issues.apache.org/jira/browse/COMPRESS-291?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14274065#comment-14274065
] 

Sascha Zorn edited comment on COMPRESS-291 at 1/12/15 8:03 PM:
---------------------------------------------------------------

I don't want to hijack this bug, as this problem most probably comes from the very slow buildDecodingStream()
call. But it is really unconvenient to not be able to just "list" all the available files
of an archive without getNextEntry() calling buildDecodingStream() for every single item.
This also makes just listing the content of files unusably slow!

Could someone please come up with a way to either speed up buildDecodingStream() or at least
calling it as late as possible (as for just listing the names and attributes of files seems
to not need buildDecodingStream)?


was (Author: saschazorn):
I don't want to hijack this bug, as this problem most probably comes from the very slow buildDecodingStream()
call. But it is really unconvenient to not be able to just "list" all the available files
of an archive without getNextEntry() calling buildDecodingStream() for every single item.
This also makes just listing the content of files unusably slow!

Could someone please come up with a way to either speed up buildDecodingStream() or at least
calling it as late as possible?

> 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
>
> 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)

Mime
View raw message