You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2013/10/11 11:13:43 UTC

svn commit: r1531235 - in /commons/proper/compress/trunk/src: main/java/org/apache/commons/compress/archivers/sevenz/ test/java/org/apache/commons/compress/archivers/

Author: bodewig
Date: Fri Oct 11 09:13:42 2013
New Revision: 1531235

URL: http://svn.apache.org/r1531235
Log:
add bzip2/deflate compression support when writing 7z archives

Modified:
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
    commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/SevenZTestCase.java

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java?rev=1531235&r1=1531234&r2=1531235&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java Fri Oct 11 09:13:42 2013
@@ -25,6 +25,8 @@ import java.security.GeneralSecurityExce
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.Arrays;
+import java.util.zip.Deflater;
+import java.util.zip.DeflaterOutputStream;
 import java.util.zip.Inflater;
 import java.util.zip.InflaterInputStream;
 
@@ -35,6 +37,7 @@ import javax.crypto.spec.IvParameterSpec
 import javax.crypto.spec.SecretKeySpec;
 
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
 import org.tukaani.xz.LZMAInputStream;
 import org.tukaani.xz.LZMA2InputStream;
 
@@ -82,7 +85,8 @@ class Coders {
     static abstract class CoderBase {
         abstract InputStream decode(final InputStream in, final Coder coder,
                 String password) throws IOException;
-        OutputStream encode(final OutputStream out, final String password) {
+        OutputStream encode(final OutputStream out, final String password)
+            throws IOException {
             throw new UnsupportedOperationException("method doesn't support writing");
         }
     }
@@ -143,6 +147,10 @@ class Coders {
             return new InflaterInputStream(new DummyByteAddingInputStream(in),
                                            new Inflater(true));
         }
+        @Override
+        OutputStream encode(final OutputStream out, final String password) {
+            return new DeflaterOutputStream(out, new Deflater(9, true));
+        }
     }
 
     static class BZIP2Decoder extends CoderBase {
@@ -151,6 +159,11 @@ class Coders {
                 throws IOException {
             return new BZip2CompressorInputStream(in);
         }
+        @Override
+        OutputStream encode(final OutputStream out, final String password)
+                throws IOException {
+            return new BZip2CompressorOutputStream(out);
+        }
     }
 
     static class AES256SHA256Decoder extends CoderBase {

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java?rev=1531235&r1=1531234&r2=1531235&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java Fri Oct 11 09:13:42 2013
@@ -46,6 +46,7 @@ public class SevenZOutputFile {
     private long fileBytesWritten = 0;
     private boolean finished = false;
     private CountingOutputStream currentOutputStream;
+    private SevenZMethod contentCompression = SevenZMethod.COPY;
     
     public SevenZOutputFile(final File filename) throws IOException {
         file = new RandomAccessFile(filename, "rw");
@@ -53,6 +54,13 @@ public class SevenZOutputFile {
     }
     
     /**
+     * Sets the compression method to use for entry contents.
+     */
+    public void setContentCompression(SevenZMethod method) {
+        this.contentCompression = method;
+    }
+
+    /**
      * Closes the archive, calling {@link #finish} if necessary.
      */
     public void close() {
@@ -204,7 +212,8 @@ public class SevenZOutputFile {
     private CountingOutputStream setupFileOutputStream() throws IOException {
         OutputStream out = new OutputStreamWrapper();
         return new CountingOutputStream(Coders
-                                        .addEncoder(out, SevenZMethod.COPY,
+                                        .addEncoder(out,
+                                                    contentCompression,
                                                     null)) {
             @Override
             public void write(final int b) throws IOException {
@@ -302,7 +311,7 @@ public class SevenZOutputFile {
     private void writeFolder(final DataOutput header) throws IOException {
         // one coder
         writeUint64(header, 1);
-        byte[] id = SevenZMethod.COPY.getId();
+        byte[] id = contentCompression.getId();
         // FIXME - deal with coder properties
         header.write(id.length);
         header.write(id);

Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/SevenZTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/SevenZTestCase.java?rev=1531235&r1=1531234&r2=1531235&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/SevenZTestCase.java (original)
+++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/SevenZTestCase.java Fri Oct 11 09:13:42 2013
@@ -24,15 +24,30 @@ import java.io.IOException;
 import org.apache.commons.compress.AbstractTestCase;
 import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
 import org.apache.commons.compress.archivers.sevenz.SevenZFile;
+import org.apache.commons.compress.archivers.sevenz.SevenZMethod;
 import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;
 
 public class SevenZTestCase extends AbstractTestCase {
-    public void testSevenZArchiveCreation() throws Exception {
+
+    public void testSevenZArchiveCreationUsingCopy() throws Exception {
+        testSevenZArchiveCreation(SevenZMethod.COPY);
+    }
+    
+    public void testSevenZArchiveCreationUsingBZIP2() throws Exception {
+        testSevenZArchiveCreation(SevenZMethod.BZIP2);
+    }
+    
+    public void testSevenZArchiveCreationUsingDeflate() throws Exception {
+        testSevenZArchiveCreation(SevenZMethod.DEFLATE);
+    }
+    
+    private void testSevenZArchiveCreation(SevenZMethod method) throws Exception {
         final File output = new File(dir, "bla.7z");
         final File file1 = getFile("test1.xml");
         final File file2 = getFile("test2.xml");
 
         final SevenZOutputFile outArchive = new SevenZOutputFile(output);
+        outArchive.setContentCompression(method);
         try {
             SevenZArchiveEntry entry;
             
@@ -66,7 +81,7 @@ public class SevenZTestCase extends Abst
             archive.close();
         }
     }
-    
+
     private void copy(final File src, final SevenZOutputFile dst) throws IOException { 
         FileInputStream fis = null;
         try {



Re: [compress] writing compressed 7z archives

Posted by Stefan Bodewig <bo...@apache.org>.
On 2013-10-11, Stefan Bodewig wrote:

> Unfortunately LZMA2OutputStream is not public in XZ for Java

But LZMA2Options#getOutputStream is - looks as if there was a way.

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


[compress] writing compressed 7z archives

Posted by Stefan Bodewig <bo...@apache.org>.
Hi all,

I've made some progress:

On 2013-10-11, <bo...@apache.org> wrote:

> Author: bodewig
> Date: Fri Oct 11 09:13:42 2013
> New Revision: 1531235

> URL: http://svn.apache.org/r1531235
> Log:
> add bzip2/deflate compression support when writing 7z archives

Unfortunately LZMA2OutputStream is not public in XZ for Java - I'll
contact Lasse to see what he thinks, but will likely propose a release
with 7z only supporting no compression/bzip2 or deflate.

I'm not sure about the default - no compression might be safest.

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org