NoCloseOutputStream.java Source Code

  • NoCloseStream Documentation and Examples
  • NoCloseOutputStream Javadoc
    /*
     * Copyright (C) 2003-2010 Stephen Ostermiller
     * http://ostermiller.org/contact.pl?regarding=Java+Utilities
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2 of the License, or
     * (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * See LICENSE.txt for details.
     */
    package com.Ostermiller.util;
    
    import java.io.*;
    
    /**
     * An output stream with a close method with no effect.
     * More information about this class is available from <a target="_top" href=
     * "http://ostermiller.org/utils/NoCloseStream.html">ostermiller.org</a>.
     * <p>
     * This class is designed to wrap a normal output stream
     * so that it can be passed to methods that write to it
     * and may erroneously close it.  This class is a workaround
     * when the method cannot be modified because it is in a
     * library.
     *
     * @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities
     * @since ostermillerutils 1.01.00
     */
    public class NoCloseOutputStream extends OutputStream implements NoCloseStream {
    
    	/**
    	 * The output stream that is being protected.
    	 * All methods should be forwarded to it,
    	 * except for the close method, which should
    	 * do nothing.  The reallyClose method should
    	 * actually close this stream.
    	 *
    	 * @since ostermillerutils 1.01.00
    	 */
    	protected OutputStream out;
    
    	/**
    	 * Protect a new output stream.
    	 *
    	 * @param out The output stream that is being protected.
    	 *
    	 * @since ostermillerutils 1.01.00
    	 */
    	public NoCloseOutputStream(OutputStream out){
    		this.out = out;
    	}
    
    	/**
    	 * {@inheritDoc}
    	 */
    	@Override public void write(int b) throws IOException {
    		out.write(b);
    	}
    
    	/**
    	 * {@inheritDoc}
    	 */
    	@Override public void write(byte[] b) throws IOException {
    		out.write(b);
    	}
    
    	/**
    	 * {@inheritDoc}
    	 */
    	@Override public void write(byte[] b, int off, int len) throws IOException {
    		out.write(b, off, len);
    	}
    
    	/**
    	 * {@inheritDoc}
    	 */
    	@Override public void flush() throws IOException {
    		out.flush();
    	}
    
    	/**
    	 * Has no effect.
    	 *
    	 * @see #reallyClose()
    	 *
    	 * @since ostermillerutils 1.01.00
    	 */
    	@Override public void close() throws IOException {
    		// Does nothing
    	}
    
    	/**
    	 * {@inheritDoc}
    	 */
    	public void reallyClose() throws IOException {
    		out.close();
    	}
    }