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