public class StatsReader extends Reader
Gather some statistics of the Reader passed in the constructor.
It can be used to read:
Statistics are accumulated for each call and are available both on a per-instance basis or in "historical" mode (for the current and all the past invocations). It is also possible to specify a key for regrouping (e.g "filesystem", "network" in order to regroup statistics of different areas)
Usage:
StatsReader srReader = new StatsReader(originalStream); // performs all the application operation on stream performTasksOnStream(srReader); srReader.close(); long size = srReader.getSize();
| Constructor and Description |
|---|
StatsReader(Reader source)
Constructs an
SizeReaderReader. |
StatsReader(Reader istream,
boolean fullReadOnClose)
Constructs an
SizeReaderReader and allow to specify actions
to do on close. |
StatsReader(Reader istream,
boolean fullReadOnClose,
boolean automaticLog)
Constructs an
SizeReaderReader and allow to specify actions
to do on close. |
StatsReader(Reader istream,
boolean fullReadOnClose,
boolean automaticLog,
String groupCategory,
StatsReader chainStream)
Constructs an
SizeReaderReader and allow to specify actions
to do on close. |
| Modifier and Type | Method and Description |
|---|---|
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.
|
static Set<String> |
getCategories()
Returns the set of categories defined for this stream (defined with the
parameter groupCategory in the constructor.
|
long |
getElapsedTime(TimeUnit tu)
Returns the time elapsed since this instance was constructed.
|
double |
getInternalOverTotalTime()
This method return a ratio between the time spent by the internal
InputStream waiting for I/O over the total time since this
class was instantiated. |
float |
getIOCharRate(ByteUnit bu)
Returns the read speed of this single instance.
|
long |
getIOTime(TimeUnit tu)
Returns the time spent until now waiting for the internal stream to
respond.
|
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
Reader or total length of the stream if the
method has been called or EOF was reached. |
long |
getTime()
Returns the time (in milliseconds) spent until now waiting for reading
from the internal
Reader. |
double |
getTotalDataRead(ByteUnit unit)
Total number of characters read by this instance over the subsequent
calls.
|
long |
getTotalElapsedTime(TimeUnit tu)
Returns the time spent until now waiting for the internal stream to
respond.
|
long |
getTotalIOTime(TimeUnit tu)
Returns the total time spent until now waiting for
reading from the internal
Reader by the instances
(identified by their constructor position). |
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. |
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(char[] b) |
int |
read(char[] chars,
int off,
int len) |
void |
reset() |
static void |
resetStatistics()
Remove keys with 0 associated instances from the maps.
|
long |
skip(long n) |
public StatsReader(Reader source)
Constructs an SizeReaderReader. When close()
is called the underlying stream will be closed. No further read will be
done.
source - Stream whose statistics must be calculated.public StatsReader(Reader istream, boolean fullReadOnClose)
SizeReaderReader and allow to specify actions
to do on close.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.public StatsReader(Reader istream, boolean fullReadOnClose, boolean automaticLog)
Constructs an SizeReaderReader and allow to specify actions
to do on close.
If automaticLog is true the statistics will be written when
the StatsReader is closed or finalized.
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.public StatsReader(Reader istream, boolean fullReadOnClose, boolean automaticLog, String groupCategory, StatsReader chainStream)
Constructs an SizeReaderReader and allow to specify actions
to do on close.
If automaticLog is true the statistics will be written when
the StatsReader is closed or finalized.
Indicates another StatsReader to chain with. The aim is to
test performances of a single Reader in a chain of multiple
Readers. You should put the Reader to be tested
between two StatsReader and chain the two together.
Reader source = //source of data
StatsReader sourceStats = new StatsReader(source);
Reader toBeTested = new ReaderToBeTested(sourceStats);
StatsReader wrapperStis=new StatsReader(toBeTested, false, false, sourceStats);
This will allow to produce statistics of the single Reader
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.
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.groupCategory - a key to regroup the "totals".chainStream - The Reader to chain.public static Set<String> getCategories()
public static void resetStatistics()
public void close()
throws IOException
fullReadOnClose was set in the
constructor it also count all the bytes of the underlying stream.close in interface Closeableclose in interface AutoCloseableclose in class ReaderIOException - if an I/O error occurs reading the whole content of the
stream.Reader.close()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 Reader bringing a loss of performances for large amount
of data. Access to this Reader should be made trough a
BufferedReader with a reasonable buffer size.
WARN: This measure is not accurate in case of mark and reset.
public float getBitRate()
public String getBitRateString()
public long getElapsedTime(TimeUnit tu)
Returns the time elapsed since this instance was constructed.
tu - Unit to measure the time.public double getInternalOverTotalTime()
This method return a ratio between the time spent by the internal
InputStream waiting for I/O over the total time since this
class was instantiated.
This can be used as an indicator to find where the most part of the time is spent. If near 1 means all the time is spent waiting for the internal stream to read the data, if near 0 means the interna
public float getIOCharRate(ByteUnit bu)
public long getIOTime(TimeUnit tu)
Returns the time spent until now waiting for the internal stream to respond.
tu - Unit to measure the time.public long getNumberRead()
int read() ,
int read(byte[]) and int read(byte[],int,int)
methods.public long getSize()
Returns the number of bytes read until now from the internal
Reader or total length of the stream if the
method has been called or EOF was reached.
close()
Calculation refers to the original size of the internal
Reader. 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.
public long getTime()
Returns the time (in milliseconds) spent until now waiting for reading
from the internal Reader.
public double getTotalDataRead(ByteUnit unit)
public long getTotalElapsedTime(TimeUnit tu)
Returns the time spent until now waiting for the internal stream to respond.
tu - Unit to measure the time.public long getTotalNumberRead()
int read(),
int read(byte[]) and int read(byte[],int,int)
methods, made by this instance over the subsequent calls.public long getTotalIOTime(TimeUnit tu)
Returns the total time spent until now waiting for
reading from the internal Reader by the instances
(identified by their constructor position).
tu - Unit to measure the time.public boolean isFullReadOnClose()
public void logCurrentStatistics()
public void mark(int readlimit)
throws IOException
mark in class ReaderIOExceptionpublic boolean markSupported()
markSupported in class Readerpublic int read()
throws IOException
read in class ReaderIOExceptionpublic int read(char[] b)
throws IOException
read in class ReaderIOExceptionpublic int read(char[] chars,
int off,
int len)
throws IOException
read in class ReaderIOExceptionpublic void reset()
throws IOException
reset in class ReaderIOExceptionpublic long skip(long n)
throws IOException
skip in class ReaderIOExceptionCopyright © 2008–2016. All rights reserved.