You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2007/10/15 13:37:16 UTC
svn commit: r584746 -
/commons/proper/io/trunk/src/java/org/apache/commons/io/input/TeeInputStream.java
Author: niallp
Date: Mon Oct 15 04:37:15 2007
New Revision: 584746
URL: http://svn.apache.org/viewvc?rev=584746&view=rev
Log:
IO-129 Add a configurable option to close the OutputStream - patch from Jukka Zitting
Modified:
commons/proper/io/trunk/src/java/org/apache/commons/io/input/TeeInputStream.java
Modified: commons/proper/io/trunk/src/java/org/apache/commons/io/input/TeeInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/apache/commons/io/input/TeeInputStream.java?rev=584746&r1=584745&r2=584746&view=diff
==============================================================================
--- commons/proper/io/trunk/src/java/org/apache/commons/io/input/TeeInputStream.java (original)
+++ commons/proper/io/trunk/src/java/org/apache/commons/io/input/TeeInputStream.java Mon Oct 15 04:37:15 2007
@@ -27,8 +27,9 @@
* bytes from the input stream being skipped or duplicated in the output
* stream.
* <p>
- * Unlike the proxied input stream (that gets closed when {@link #close()}
- * is called), the associated output stream is never closed by this class.
+ * The proxied input stream is closed when the {@link #close()} method is
+ * called on this proxy. It is configurable whether the associated output
+ * stream will also closed.
*
* @since Commons IO 1.4
*/
@@ -41,15 +42,56 @@
private final OutputStream branch;
/**
+ * Flag for closing also the associated output stream when this
+ * stream is closed.
+ */
+ private final boolean closeBranch;
+
+ /**
* Creates a TeeInputStream that proxies the given {@link InputStream}
- * and copies all read bytes to the given {@link OutputStream}.
+ * and copies all read bytes to the given {@link OutputStream}. The given
+ * output stream will not be closed when this stream gets closed.
*
* @param input input stream to be proxied
* @param branch output stream that will receive a copy of all bytes read
*/
public TeeInputStream(InputStream input, OutputStream branch) {
+ this(input, branch, false);
+ }
+
+ /**
+ * Creates a TeeInputStream that proxies the given {@link InputStream}
+ * and copies all read bytes to the given {@link OutputStream}. The given
+ * output stream will be closed when this stream gets closed if the
+ * closeBranch parameter is <code>true</code>.
+ *
+ * @param input input stream to be proxied
+ * @param branch output stream that will receive a copy of all bytes read
+ * @param closeBranch flag for closing also the output stream when this
+ * stream is closed
+ */
+ public TeeInputStream(
+ InputStream input, OutputStream branch, boolean closeBranch) {
super(input);
this.branch = branch;
+ this.closeBranch = closeBranch;
+ }
+
+ /**
+ * Closes the proxied input stream and, if so configured, the associated
+ * output stream. An exception thrown from one stream will not prevent
+ * closing of the other stream.
+ *
+ * @throws IOException if either of the streams could not be closed
+ */
+ public void close() throws IOException {
+ try {
+ super.close();
+ } finally {
+ if (closeBranch) {
+ branch.close();
+ }
+ }
}
/**