public abstract class PumpedReader extends PipedReader implements Runnable
PipedReader and PipedWriter
Using PipedReader and PipedWriter looks cumbersome.
PipedReader pipedReader = new PipedReader();
final PipedWriter pipedWriter = new PipedWriter(pipedReader);
final IOException ioEx[] = { null };
new Thread(){
@Override
public void run(){
try{
writeDataTo(pipedWriter);
pipedWriter.close();
}catch(IOException ex){
ioEx[0] = ex;
}
}
}.start();
readDataFrom(pipedReader);
pipedReader.close();
if(ioEx[0]!=null)
throw new RuntimeException("something gone wrong", ioEx[0]);
The same can be achieved using PumpedReader as follows:
PumpedReader reader = new PumpedReader(){
@Override
protected void pump(PipedWriter writer) throws Exception{
writeDataTo(writer);
}
}.start(); // start() will spawn new thread
readDataFrom(reader);
reader.close(); // any exceptions occurred in pump(...) are thrown by close()
PumpedReader is an abstract class with following abstract method:
protected abstract void pump(PipedWriter writer) throws Exception;
This method implementation should write data into writer which is passed as argument and close it.pump(...) are wrapped in IOException and rethrown by PumpedReader.close().
PumpedReader implements Runnable which is supposed to be run in thread.
You can use PumpedReader.start() method to start thread or spawn thread implicitly.
start() method returns self reference.
public PumpedReader start();
The advantage of PumpedReader over PipedReader/PipedWriter/Thread is:
PumpedInputStream| Constructor and Description |
|---|
PumpedReader() |
| Modifier and Type | Method and Description |
|---|---|
void |
close()
Closes this stream and releases any system resources
associated with the stream.
|
protected abstract void |
pump(PipedWriter writer)
Subclasse implementation should write data into
writer. |
void |
run() |
PumpedReader |
start()
Starts a thread with this instance as runnable.
|
connect, read, read, readypublic PumpedReader start()
public void close()
throws IOException
Any exception thrown by pump(java.io.PipedWriter)
are cached and rethrown by this method
close in interface Closeableclose in interface AutoCloseableclose in class PipedReaderIOException - if an I/O error occurs.protected abstract void pump(PipedWriter writer) throws Exception
writer.writer - writer into which data should be writtenExceptionCopyright © 2021. All rights reserved.