com.gc.iotools.stream.is.inspection
Class StatsInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by com.gc.iotools.stream.is.inspection.StatsInputStream
All Implemented Interfaces:
Closeable

public class StatsInputStream
extends InputStream

Gather some statistics of the InputStream passed in the constructor.

It can be used to read:

Full statistics are available after the stream has been fully processed (by other parts of the application), or after invoking the method close() while partial statistics are available on the fly.

Usage:

 StatsInputStream srIstream = new StatsInputStream(originalStream);
 //performs all the application operation on stream
 performTasksOnStream(srIstream);
 srIstream.close();
 long size = srIstream.getSize();
 

Since:
1.2.1
Version:
$Id: StatsInputStream.java 463 2011-01-21 23:54:17Z dvd.smnt@gmail.com $
Author:
dvd.smnt

Constructor Summary
StatsInputStream(InputStream source)
           Constructs an SizeReaderInputStream.
StatsInputStream(InputStream istream, boolean fullReadOnClose)
          Constructs an SizeReaderInputStream and allow to specify actions to do on close.
StatsInputStream(InputStream istream, boolean fullReadOnClose, boolean automaticLog)
           Constructs an SizeReaderInputStream and allow to specify actions to do on close.
StatsInputStream(InputStream istream, boolean fullReadOnClose, boolean automaticLog, StatsInputStream chainStream)
           Constructs an SizeReaderInputStream and allow to specify actions to do on close.
 
Method Summary
 int available()
          
 void close()
           Closes the inner stream.
protected  void finalize()
          
 float getAverageBytePerRead()
           Returns the average bytes per read.
 float getBitRate()
          Returns the reading bit rate in KB per second of this single instance.
 String getBitRateString()
          Returns the reading bit rate formatted with a convenient unit.
 long getNumberRead()
          Number of calls to int read() , int read(byte[]) and int read(byte[],int,int) methods.
 long getSize()
           Returns the number of bytes read until now from the internal InputStream or total length of the stream if the close() method has been called or EOF was reached.
 long getTime()
           Returns the time (in milliseconds) spent until now waiting for reading from the internal InputStream.
 long getTime(TimeUnit tu)
           Returns the time spent until now waiting for the internal stream to respond.
 long getTotalNumberRead()
          Total count of calls to int read(), int read(byte[]) and int read(byte[],int,int) methods, made by this instance over the subsequent calls.
 long getTotalTime(TimeUnit tu)
           Returns the total time (in milliseconds) spent until now waiting for reading from the internal InputStream by the instances (identified by their constructor position).
 boolean isFullReadOnClose()
          Returns the behavior of the close method.
 void logCurrentStatistics()
          Logs the current statistics.
 void mark(int readlimit)
          
 boolean markSupported()
          
 int read()
          
 int read(byte[] b)
          
 int read(byte[] b, int off, int len)
          
 void reset()
          
 long skip(long n)
          
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StatsInputStream

public StatsInputStream(InputStream source)

Constructs an SizeReaderInputStream. When close() is called the underlying stream will be closed. No further read will be done.

Parameters:
source - Stream whose statistics must be calculated.

StatsInputStream

public StatsInputStream(InputStream istream,
                        boolean fullReadOnClose)
Constructs an SizeReaderInputStream and allow to specify actions to do on close.

Parameters:
istream - Stream whose bytes must be counted.
fullReadOnClose - if true after the close the inner stream is read completely and the effective size of the inner stream is calculated.

StatsInputStream

public StatsInputStream(InputStream istream,
                        boolean fullReadOnClose,
                        boolean automaticLog)

Constructs an SizeReaderInputStream and allow to specify actions to do on close.

If automaticLog is true the statistics will be written when the StatsInputStream is closed or finalized.

Parameters:
istream - Stream whose bytes must be counted.
fullReadOnClose - if true after the close the inner stream is read completely and the effective size of the inner stream is calculated.
automaticLog - if true statistics will be automatically written when the stream is closed or finalized.
Since:
1.2.7

StatsInputStream

public StatsInputStream(InputStream istream,
                        boolean fullReadOnClose,
                        boolean automaticLog,
                        StatsInputStream chainStream)

Constructs an SizeReaderInputStream and allow to specify actions to do on close.

If automaticLog is true the statistics will be written when the StatsInputStream is closed or finalized.

Indicates another StatsInputStream to chain with. The aim is to test performances of a single InputStream in a chain of multiple InputStreams. You should put the InputStream to be tested between two StatsInputStream and chain the two together.

InputStream source = //source of data StatsInputStream sourceStats = new StatsInputStream(source); InputStream toBeTested = new InputStreamToBeTested(stis); StatsInputStream wrapperStis=new StatsInputStream(toBeTested, false, false, sourceStats);

This will allow to produce statistics of the single InputStream to be tested, in a way independent from the source. Times spent will be the difference between the times from the source and times on the final wrapper.

Parameters:
istream - Stream whose bytes must be counted.
fullReadOnClose - if true after the close the inner stream is read completely and the effective size of the inner stream is calculated.
automaticLog - if true statistics will be automatically written when the stream is closed or finalized.
chainStream - The InputStream to chain.
Since:
1.3.0
Method Detail

available

public int available()
              throws IOException

Overrides:
available in class InputStream
Throws:
IOException

close

public void close()
           throws IOException
Closes the inner stream. If fullReadOnClose was set in the constructor it also count all the bytes of the underlying stream.

Specified by:
close in interface Closeable
Overrides:
close in class InputStream
Throws:
IOException - if an I/O error occurs reading the whole content of the stream.
See Also:
InputStream.close()

finalize

protected void finalize()
                 throws Throwable

Overrides:
finalize in class Object
Throws:
Throwable

getAverageBytePerRead

public float getAverageBytePerRead()

Returns the average bytes per read.

If this parameter is near 1 means that too many calls are made to read the InputStream bringing a loss of performances for large amount of data. Access to this InputStream should be made trough a BufferedInputStream with a reasonable buffer size.

WARN: This measure is not accurate in case of mark and reset.

Returns:
The average bytes per read().

getBitRate

public float getBitRate()
Returns the reading bit rate in KB per second of this single instance.

Returns:
The KB/Sec bitRate of the stream.

getBitRateString

public String getBitRateString()
Returns the reading bit rate formatted with a convenient unit.

Returns:
The bitRate of the stream.

getNumberRead

public long getNumberRead()
Number of calls to int read() , int read(byte[]) and int read(byte[],int,int) methods.

Returns:
Long representing the number of calls to read() methods.

getSize

public long getSize()

Returns the number of bytes read until now from the internal InputStream or total length of the stream if the close() method has been called or EOF was reached.

Calculation refers to the original size of the internal InputStream. If mark(int) and reset() are called, the extra data read after the reset() is not taken in account, until the mark position is reached again.

Returns:
bytes read until now or the total length of the stream if close() was called.

getTime

public long getTime()

Returns the time (in milliseconds) spent until now waiting for reading from the internal InputStream.

Returns:
time spent in waiting in milliseconds.

getTime

public long getTime(TimeUnit tu)

Returns the time spent until now waiting for the internal stream to respond.

Parameters:
tu - Unit to measure the time.
Returns:
time spent in waiting.

getTotalNumberRead

public long getTotalNumberRead()
Total count of calls to int read(), int read(byte[]) and int read(byte[],int,int) methods, made by this instance over the subsequent calls.

Returns:
Long representing the number of calls to read() methods.

getTotalTime

public long getTotalTime(TimeUnit tu)

Returns the total time (in milliseconds) spent until now waiting for reading from the internal InputStream by the instances (identified by their constructor position).

Parameters:
tu - Unit to measure the time.
Returns:
time spent in waiting.

isFullReadOnClose

public boolean isFullReadOnClose()
Returns the behavior of the close method. If true when close is invoked a full read of the stream will be performed.

Returns:
Whether a full read will be performed on the invocation of close() method.

logCurrentStatistics

public void logCurrentStatistics()
Logs the current statistics.


mark

public void mark(int readlimit)

Overrides:
mark in class InputStream

markSupported

public boolean markSupported()

Overrides:
markSupported in class InputStream

read

public int read()
         throws IOException

Specified by:
read in class InputStream
Throws:
IOException

read

public int read(byte[] b)
         throws IOException

Overrides:
read in class InputStream
Throws:
IOException

read

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

Overrides:
read in class InputStream
Throws:
IOException

reset

public void reset()
           throws IOException

Overrides:
reset in class InputStream
Throws:
IOException

skip

public long skip(long n)
          throws IOException

Overrides:
skip in class InputStream
Throws:
IOException


Copyright © 2008-2011. All Rights Reserved.