plug a few more native memory leaks

aftermaths of COMPRESS-343, inspired by #11
diff --git a/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java b/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
index 7564823..3534805 100644
--- a/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
@@ -294,18 +294,18 @@
                         0x03)) {
                     case ZLIB:
 
+                        Inflater inflator = new Inflater();
                         try {
-                            Inflater inflator = new Inflater();
                             inflator.setInput(compBuffer, 0, compBuffer.length);
                             length = inflator.inflate(blockBuffer);
 
                             if (length != blockSize) {
                                 throw new ShortFileException();
                             }
-
-                            inflator.end();
                         } catch (DataFormatException e) {
                             throw new DumpArchiveException("bad data", e);
+                        } finally {
+                            inflator.end();
                         }
 
                         break;
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
index 2f7894a..584aa4a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
@@ -519,8 +519,11 @@
     public void close() throws IOException {
         if (!closed) {
             closed = true;
-            in.close();
-            inf.end();
+            try {
+                in.close();
+            } finally {
+                inf.end();
+            }
         }
     }
 
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
index 51fe771..31444d7 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
@@ -420,8 +420,11 @@
                 return new InflaterInputStream(bis, inflater) {
                     @Override
                     public void close() throws IOException {
-                        super.close();
-                        inflater.end();
+                        try {
+                            super.close();
+                        } finally {
+                            inflater.end();
+                        }
                     }
                 };
             case BZIP2:
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
index d4fec63..f7b8dd0 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
@@ -37,6 +37,7 @@
     private static final int MAGIC_2d = 0xda;
     
     private final InputStream in;
+    private final Inflater inflater;
 
     /**
      * Creates a new input stream that decompresses Deflate-compressed data
@@ -58,7 +59,8 @@
      */
     public DeflateCompressorInputStream(InputStream inputStream,
                                         DeflateParameters parameters) {
-        in = new InflaterInputStream(inputStream, new Inflater(!parameters.withZlibHeader()));
+        inflater = new Inflater(!parameters.withZlibHeader());
+        in = new InflaterInputStream(inputStream, inflater);
     }
     
     /** {@inheritDoc} */
@@ -92,7 +94,11 @@
     /** {@inheritDoc} */
     @Override
     public void close() throws IOException {
-        in.close();
+        try {
+            in.close();
+        } finally {
+            inflater.end();
+        }
     }
     
     /**
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java
index 3714fe4..e978a57 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java
@@ -31,7 +31,8 @@
  */
 public class DeflateCompressorOutputStream extends CompressorOutputStream {
     private final DeflaterOutputStream out;
-   
+    private final Deflater deflater;
+
     /**
      * Creates a Deflate compressed output stream with the default parameters.
      * @param outputStream the stream to wrap
@@ -49,7 +50,8 @@
      */
     public DeflateCompressorOutputStream(OutputStream outputStream,
                                          DeflateParameters parameters) throws IOException {
-        this.out = new DeflaterOutputStream(outputStream, new Deflater(parameters.getCompressionLevel(), !parameters.withZlibHeader()));
+        this.deflater = new Deflater(parameters.getCompressionLevel(), !parameters.withZlibHeader());
+        this.out = new DeflaterOutputStream(outputStream, deflater);
     }
 
     @Override
@@ -83,6 +85,10 @@
 
     @Override
     public void close() throws IOException {
-        out.close();
+        try {
+            out.close();
+        } finally {
+            deflater.end();
+        }
     }
 }