1 /*
2  * CloseIgnoringInputStream
3  *
4  * Author: Lasse Collin <lasse.collin@tukaani.org>
5  *
6  * This file has been put into the public domain.
7  * You can do whatever you want with this file.
8  */
9 
10 package org.tukaani.xz;
11 
12 import java.io.InputStream;
13 import java.io.FilterInputStream;
14 
15 /**
16  * An {@code InputStream} wrapper whose {@code close()} does nothing.
17  * This is useful with raw decompressors if you want to call
18  * {@code close()} to release memory allocated from an {@link ArrayCache}
19  * but don't want to close the underlying {@code InputStream}.
20  * For example:
21  * <p><blockquote><pre>
22  * InputStream rawdec = new LZMA2InputStream(
23  *         new CloseIgnoringInputStream(myInputStream),
24  *         myDictSize, null, myArrayCache);
25  * doSomething(rawdec);
26  * rawdec.close(); // This doesn't close myInputStream.
27  * </pre></blockquote>
28  * <p>
29  * With {@link XZInputStream}, {@link SingleXZInputStream}, and
30  * {@link SeekableXZInputStream} you can use their {@code close(boolean)}
31  * method to avoid closing the underlying {@code InputStream}; with
32  * those classes {@code CloseIgnoringInputStream} isn't needed.
33  *
34  * @since 1.7
35  */
36 public class CloseIgnoringInputStream extends FilterInputStream {
37     /**
38      * Creates a new {@code CloseIgnoringInputStream}.
39      */
CloseIgnoringInputStream(InputStream in)40     public CloseIgnoringInputStream(InputStream in) {
41         super(in);
42     }
43 
44     /**
45      * This does nothing (doesn't call {@code in.close()}).
46      */
close()47     public void close() {}
48 }
49