package org.jaudiotagger.audio.asf.io; import java.io.IOException; import java.io.OutputStream; /** * This output stream wraps around another {@link OutputStream} and delegates * the write calls.<br> * Additionally all written bytes are counted and available by * {@link #getCount()}. * * @author Christian Laireiter */ public class CountingOutputstream extends OutputStream { /** * Stores the amount of bytes written. */ private long count = 0; /** * The stream to forward the write calls. */ private final OutputStream wrapped; /** * Creates an instance which will delegate the write calls to the given * output stream. * * @param outputStream * stream to wrap. */ public CountingOutputstream(final OutputStream outputStream) { super(); assert outputStream != null; this.wrapped = outputStream; } /** * {@inheritDoc} */ @Override public void close() throws IOException { this.wrapped.close(); } /** * {@inheritDoc} */ @Override public void flush() throws IOException { this.wrapped.flush(); } /** * @return the count */ public long getCount() { return this.count; } /** * {@inheritDoc} */ @Override public void write(final byte[] bytes) throws IOException { this.wrapped.write(bytes); this.count += bytes.length; } /** * {@inheritDoc} */ @Override public void write(final byte[] bytes, final int off, final int len) throws IOException { this.wrapped.write(bytes, off, len); this.count += len; } /** * {@inheritDoc} */ @Override public void write(final int toWrite) throws IOException { this.wrapped.write(toWrite); this.count++; } }