commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <>
Subject [Commons Wiki] Update of "Compress" by ChristianGrobmeier
Date Sat, 14 Mar 2009 22:30:52 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Commons Wiki" for change notification.

The following page has been changed by ChristianGrobmeier:

The comment on the change is:
modified everything to fit to new implementation, creating link to todo list

  = Component Overview =
- Compress is an API for working with tar, zip and bzip2 files.
+ Compress is an API for working with the following files: tar, zip, bzip2, cpio, ar, gz,
  = Quick Start =
- *compress* is divided between Compressors and Archivers. While you have
- to get an Archiver from a factory when just archiving one or more files
- to the target file (tar), you'll need a Compressor for reducing the files size (bzip2).
+ *compress* is a stream based API. It's original code in this component came from Avalon's
Excalibur, but originally from Ant, as far as life in Apache goes. It has migrated via:
+ Ant -> Avalon-Excalibur -> Commons-IO -> Commons-Compress.
+ More credits can be found in NOTICE.txt file.
+ *compress* divides the implementation in Compressors and Archivers. For each one an factory
is implemented. 
+ Basically you have to get the stream implementation from the factory, create an entry, put
this into the stream and stream.
+ Some experimental code makes it possible to modify archiver and compressor files. This means
you can delete from for example a zip file.
  Please note:
- There are discussion of "sponsoring" compress with code from TrueZip (
- and of enhancing compress design. At the moment the current implementation
- is considered as complex by some people. An deeper look at compress implementation
- can be found on the CompressImplementationDetails page.
+ There were discussion of "sponsoring" compress with code from TrueZip (
The result was, not to include any code from this project (see mailinglists). 
+ There was a discussion about the complex file based implementation too. The result was to
start again with a stream based implementation and move the old one to a branch. More information
about the old implementation can be found on the CompressImplementationDetails page.
+ = Roadmap =
+ Compress looks like moving to proper now and prepares for the first release. If you want
to help, here is the CompressRoadmap.
  == Archiver ==
- To pack an archive, you have to get an archiver via the ArchiverFactory. At the moment it's
possible to get a "zip" or a "tar" archiver. Add your files to the archiver and call save
to store the archive.
+ To pack an archive, you have to get an archiver stream via the ArchiverFactory. Add your
streams to the archiver and stream. 
+ Archiver streams are: ZIP, CPIO, AR, TAR, JAR.
- === Packing a ZIP-File ===
+ === Creating a ZIP-File ===
- 	{{{Archive archiver = ArchiverFactory.getInstance("zip");
- 		archiver.add(	new File("C:\\Temp\\1.html"));
- 		archiver.add(	new File("C:\\Temp\\1.html.bz2"));
-	new File("C:\\Temp\\"));}}}
+ 	{{{final OutputStream out = new FileOutputStream(output);
+         ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream("zip",
+         os.putArchiveEntry(new ZipArchiveEntry("testdata/test1.xml"));
+         IOUtils.copy(new FileInputStream(file1), os);
+         os.closeArchiveEntry();
+         os.putArchiveEntry(new ZipArchiveEntry("testdata/test2.xml"));
+         IOUtils.copy(new FileInputStream(file2), os);
+         os.closeArchiveEntry();
+         os.close();}}}
  === Unpacking a ZIP-File ===
- 	{{{Archive archiver = ArchiverFactory.getInstance(
- 				new File("C:\\Temp\\"));
- 		archiver.unpack( new File("C:\\Temp\\unpacked\\"));}}}
+ 	{{{final InputStream is = new FileInputStream(input);
+         ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream("zip",
+         ZipArchiveEntry entry = (ZipArchiveEntry)in.getNextEntry();
+         OutputStream out = new FileOutputStream(new File(dir, entry.getName()));
+         IOUtils.copy(in, out);
+         out.close();
+         in.close();}}}
  == Compressor ==
- Same goes for Compressor. At the moment there is only "bz2" support.
+ Same goes for Compressor. Compressor streams are: bz2 and gz.
  === Compressing a file ===
- 	{{{Compressor compressor;
- 	compressor = CompressorFactory.getInstance("bz2");
- 	compressor.compressToHere( new File("C:\\Temp\\test.tar"));}}}
+ 	{{{final OutputStream out = new FileOutputStream(output);
+ 	CompressorOutputStream cos = new CompressorStreamFactory().createCompressorOutputStream("bzip2",
+ 	IOUtils.copy(new FileInputStream(input), cos);
+ 	cos.close();}}}
  === Decompressing a file ===
- 	{{{Compressor decompressor;
- 	decompressor = CompressorFactory.getInstance("bz2");
- 	decompressor.decompressTo( 	new File("C:\\Temp\\asf-logo-huge.tar.bz2"),
- 					new File("C:\\Temp\\asf-logo-huge.tar"));}}}
+ 	{{{final InputStream is = new FileInputStream(input);
+         CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream("bzip2",
+         IOUtils.copy(in, new FileOutputStream(output));
+ 	in.close();}}}
  = FAQ =
   ||Add your questions/answers here.||
- = TODO =
- - Add delete features
- - Enhance implementation design

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message