Package org.apache.commons.io.input
Class ObservableInputStream
java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.commons.io.input.ProxyInputStream
org.apache.commons.io.input.ObservableInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable
- Direct Known Subclasses:
MessageDigestCalculatingInputStream,MessageDigestInputStream
The
ObservableInputStream allows, that an InputStream may be consumed by other receivers, apart from the
thread, which is reading it. The other consumers are implemented as instances of ObservableInputStream.Observer.
A typical application may be the generation of a MessageDigest on the fly.
Note: The ObservableInputStream is not thread safe, as instances of InputStream usually
aren't. If you must access the stream from multiple threads, then synchronization, locking, or a similar means must
be used.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classAbstracts observer callback forObservableInputStreams. -
Field Summary
Fields inherited from class java.io.FilterInputStream
in -
Constructor Summary
ConstructorsConstructorDescriptionObservableInputStream(InputStream inputStream) Constructs a new ObservableInputStream for the given InputStream.ObservableInputStream(InputStream inputStream, ObservableInputStream.Observer... observers) Constructs a new ObservableInputStream for the given InputStream. -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(ObservableInputStream.Observer observer) Adds an Observer.voidclose()Invokes the delegate'sclose()method.voidconsume()Reads all data from the underlyingInputStream, while notifying the observers.Gets a copy of currently registered observers.protected voidNotifies the observers by invokingObservableInputStream.Observer.finished().protected voidnoteDataByte(int value) Notifies the observers by invokingObservableInputStream.Observer.data(int)with the given arguments.protected voidnoteDataBytes(byte[] buffer, int offset, int length) Notifies the observers by invokingObservableInputStream.Observer.data(byte[],int,int)with the given arguments.protected voidnoteError(IOException exception) Notifies the observers by invokingObservableInputStream.Observer.error(IOException)with the given argument.protected voidNotifies the observers by invokingObservableInputStream.Observer.finished().intread()Invokes the delegate'sread()method.intread(byte[] buffer) Invokes the delegate'sread(byte[])method.intread(byte[] buffer, int offset, int length) Invokes the delegate'sread(byte[], int, int)method.voidremove(ObservableInputStream.Observer observer) Removes an Observer.voidRemoves all Observers.Methods inherited from class org.apache.commons.io.input.ProxyInputStream
afterRead, available, beforeRead, handleIOException, mark, markSupported, reset, skip, unwrap
-
Constructor Details
-
ObservableInputStream
Constructs a new ObservableInputStream for the given InputStream.- Parameters:
inputStream- the input stream to observe.
-
ObservableInputStream
Constructs a new ObservableInputStream for the given InputStream.- Parameters:
inputStream- the input stream to observe.observers- List of observer callbacks.- Since:
- 2.9.0
-
-
Method Details
-
add
Adds an Observer.- Parameters:
observer- the observer to add.
-
close
Description copied from class:ProxyInputStreamInvokes the delegate'sclose()method.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classProxyInputStream- Throws:
IOException- if an I/O error occurs.
-
consume
Reads all data from the underlyingInputStream, while notifying the observers.- Throws:
IOException- The underlyingInputStream, or either of the observers has thrown an exception.
-
getObservers
Gets a copy of currently registered observers.- Returns:
- a copy of the list of currently registered observers.
- Since:
- 2.9.0
-
noteClosed
Notifies the observers by invokingObservableInputStream.Observer.finished().- Throws:
IOException- Some observer has thrown an exception, which is being passed down.
-
noteDataByte
Notifies the observers by invokingObservableInputStream.Observer.data(int)with the given arguments.- Parameters:
value- Passed to the observers.- Throws:
IOException- Some observer has thrown an exception, which is being passed down.
-
noteDataBytes
Notifies the observers by invokingObservableInputStream.Observer.data(byte[],int,int)with the given arguments.- Parameters:
buffer- Passed to the observers.offset- Passed to the observers.length- Passed to the observers.- Throws:
IOException- Some observer has thrown an exception, which is being passed down.
-
noteError
Notifies the observers by invokingObservableInputStream.Observer.error(IOException)with the given argument.- Parameters:
exception- Passed to the observers.- Throws:
IOException- Some observer has thrown an exception, which is being passed down. This may be the same exception, which has been passed as an argument.
-
noteFinished
Notifies the observers by invokingObservableInputStream.Observer.finished().- Throws:
IOException- Some observer has thrown an exception, which is being passed down.
-
read
Description copied from class:ProxyInputStreamInvokes the delegate'sread()method.- Overrides:
readin classProxyInputStream- Returns:
- the byte read or -1 if the end of stream
- Throws:
IOException- if an I/O error occurs.
-
read
Description copied from class:ProxyInputStreamInvokes the delegate'sread(byte[])method.- Overrides:
readin classProxyInputStream- Parameters:
buffer- the buffer to read the bytes into- Returns:
- the number of bytes read or EOF if the end of stream
- Throws:
IOException- if an I/O error occurs.
-
read
Description copied from class:ProxyInputStreamInvokes the delegate'sread(byte[], int, int)method.- Overrides:
readin classProxyInputStream- Parameters:
buffer- the buffer to read the bytes intooffset- The start offsetlength- The number of bytes to read- Returns:
- the number of bytes read or -1 if the end of stream
- Throws:
IOException- if an I/O error occurs.
-
remove
Removes an Observer.- Parameters:
observer- the observer to remove
-
removeAllObservers
Removes all Observers.
-