Bugfix for COMPRESS-343
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
index fad904c..f67accc 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
@@ -154,13 +154,59 @@
         InputStream decode(final String archiveName, final InputStream in, long uncompressedLength,
                 final Coder coder, final byte[] password)
             throws IOException {
-            return new InflaterInputStream(new DummyByteAddingInputStream(in),
-                                           new Inflater(true));
+            final Inflater inflater = new Inflater(true);
+            final InflaterInputStream inflaterInputStream = new InflaterInputStream(new DummyByteAddingInputStream(in),
+                    inflater);
+            return new InputStream() {
+                @Override
+                public int read() throws IOException {
+                    return inflaterInputStream.read();
+                }
+
+                @Override
+                public int read(byte[] b, int off, int len) throws IOException {
+                    return inflaterInputStream.read(b, off, len);
+                }
+
+                @Override
+                public int read(byte[] b) throws IOException {
+                    return inflaterInputStream.read(b);
+                }
+
+                @Override
+                public void close() throws IOException {
+                    inflaterInputStream.close();
+                    inflater.end();
+                }
+            };
         }
         @Override
         OutputStream encode(final OutputStream out, final Object options) {
             int level = numberOptionOrDefault(options, 9);
-            return new DeflaterOutputStream(out, new Deflater(level, true));
+            final Deflater deflater = new Deflater(level, true);
+            final DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(out, deflater);
+            return new OutputStream() {
+                @Override
+                public void write(int b) throws IOException {
+                    deflaterOutputStream.write(b);
+                }
+
+                @Override
+                public void write(byte[] b) throws IOException {
+                    deflaterOutputStream.write(b);
+                }
+
+                @Override
+                public void write(byte[] b, int off, int len) throws IOException {
+                    deflaterOutputStream.write(b, off, len);
+                }
+
+                @Override
+                public void close() throws IOException {
+                    deflaterOutputStream.close();
+                    deflater.end();
+                }
+            };
         }
     }