package rocks.inspectit.ui.rcp.storage.http; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; /** * Special output stream that reports the bytes sent to the {@link TransferDataMonitor}. Since it is * extending the FilterOutputStream all operations are forwarded to the wrapped stream. * * @author Ivan Senic * */ public class TransferRateOutputStream extends FilterOutputStream { /** * Data monitor to report to. */ private TransferDataMonitor transferDataMonitor; /** * Default constructor. * * @param outputStream * Stream. * @param transferDataMonitor * Data monitor to report to. */ public TransferRateOutputStream(OutputStream outputStream, TransferDataMonitor transferDataMonitor) { super(outputStream); this.transferDataMonitor = transferDataMonitor; } /** * {@inheritDoc} */ @Override public void write(byte[] b, int off, int len) throws IOException { super.write(b, off, len); markSent(len); } /** * Marks a sent amount of bytes. * * @param byteCount * Byte count. */ private void markSent(long byteCount) { transferDataMonitor.addSample(byteCount); } }