com.gc.iotools.stream.os
Class TeeOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by com.gc.iotools.stream.os.TeeOutputStream
All Implemented Interfaces:
Closeable, Flushable

public class TeeOutputStream
extends OutputStream

Copies the data that is written to this class to the array of OutputStream passed in the constructor, allowing to write to multiple OutputStream at once. It also collect statistics on the operations done (time spent writing to the internal streams, amount of data written).

Usage:

         InputStream source=... //some data to be read.
   ByteArrayOutputStream destination1= new ByteArrayOutputStream();
   ByteArrayOutputStream destination2= new ByteArrayOutputStream();
 
   TeeOutputStream tee =  new TeeOutputStream(destination1,destination2);
   org.apache.commons.io.IOUtils.copy(source,tee);
   tee.close();
   //at this point both destination1 and destination2 contains the same bytes.
 

Since:
1.2.4
Version:
$Id: TeeOutputStream.java 527 2014-02-24 19:29:50Z gabriele.contini@gmail.com $
Author:
dvd.smnt

Field Summary
protected  boolean closeCalled
          True when close() is invoked.
protected  OutputStream[] destinations
          The destination OutputStream(s) where data is written.
 
Constructor Summary
TeeOutputStream(OutputStream... destinations)
           Creates a TeeOutputStream and saves its arguments, the destinations for later use.
 
Method Summary
 void close()
          
 void enableCopy(boolean enable)
           Allow to switch off the copy to the underlying streams.
 void enableCopy(boolean[] enable)
           Allow to switch off the copy to the underlying streams, selectively enabling or disabling copy on some specific stream.
 void flush()
          
 OutputStream[] getDestinationStreams()
           Returns the OutputStream(s) passed in the constructor.
 long getSize()
           This method returns the size in bytes of the data written to this OutputStream.
 long[] getWriteTime()
           Return the time spent writing to the destination OutputStream(s) in milliseconds.
 void write(byte[] b)
          
 void write(byte[] b, int off, int len)
          
 void write(int b)
          
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

closeCalled

protected boolean closeCalled
True when close() is invoked. Prevents data from being written to the destination OutputStream(s) after close() has been invoked.


destinations

protected final OutputStream[] destinations
The destination OutputStream(s) where data is written.

Constructor Detail

TeeOutputStream

public TeeOutputStream(OutputStream... destinations)

Creates a TeeOutputStream and saves its arguments, the destinations for later use.

This constructor allow to specify multiple OutputStream to which the data will be copied.

Parameters:
destinations - Data written to this OutputStream are copied to all the destinations.
Since:
1.2.4
Method Detail

close

public void close()
           throws IOException

Specified by:
close in interface Closeable
Overrides:
close in class OutputStream
Throws:
IOException

enableCopy

public final void enableCopy(boolean enable)

Allow to switch off the copy to the underlying streams. The copy is enabled by default. Setting the parameter to false will disable the copy to all the underlying streams at once.

If you need more fine grained control you should use enableCopy(boolean[]) .

Parameters:
enable - whether to copy or not the bytes to the underlying stream.
Since:
1.2.8

enableCopy

public final void enableCopy(boolean[] enable)

Allow to switch off the copy to the underlying streams, selectively enabling or disabling copy on some specific stream.

The copy is enabled by default. Each element in the array correspond to an OutputStream passed in the constructor. If the correspondent element in the array passed as a parameter is set to true the copy will be enabled.It can be invoked multiple times.

Parameters:
enable - whether to copy or not the bytes to the underlying stream.
Since:
1.2.9

flush

public void flush()
           throws IOException

Specified by:
flush in interface Flushable
Overrides:
flush in class OutputStream
Throws:
IOException

getDestinationStreams

public final OutputStream[] getDestinationStreams()

Returns the OutputStream(s) passed in the constructor.

Returns:
Array of OutputStream passed in the constructor.
Since:
1.2.9

getSize

public final long getSize()

This method returns the size in bytes of the data written to this OutputStream. It can be used to collect statistics on the write operations.

Returns:
size in bytes of the data written to the OutputStreams.

getWriteTime

public long[] getWriteTime()

Return the time spent writing to the destination OutputStream(s) in milliseconds.

The returned array has one element for each OutputStream passed in the constructor.

Returns:
time spent writing on the destination OutputStreams.

write

public void write(byte[] b)
           throws IOException

Overrides:
write in class OutputStream
Throws:
IOException

write

public void write(byte[] b,
                  int off,
                  int len)
           throws IOException

Overrides:
write in class OutputStream
Throws:
IOException

write

public void write(int b)
           throws IOException

Specified by:
write in class OutputStream
Throws:
IOException


Copyright © 2008–2014. All rights reserved.