edu.isi.pegasus.common.util
Class StreamGobbler

java.lang.Object
  extended by java.lang.Thread
      extended by edu.isi.pegasus.common.util.StreamGobbler
All Implemented Interfaces:
Runnable

public class StreamGobbler
extends Thread

A Stream gobbler class to take care of reading from a stream and optionally write out to another stream. Allows for non blocking reads on both stdout and stderr, when invoking a process through Runtime.exec(). Also, the user can specify a callback that is called whenever anything is read from the stream.

Author:
Karan Vahi

Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private  StreamGobblerCallback mCallback
          The callback to be used.
private  InputStream mIPStream
          The input stream that is to be read from.
private  LogManager mLogger
          The handle to the logging object.
private  OutputStream mOPStream
          The output stream to which the contents have to be redirected to.
private  String mPrompt
          The prompt that is to be written to the output stream.
private  boolean mStarted
          A boolean indicating whether the thread has started or not.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
StreamGobbler(InputStream is, StreamGobblerCallback callback)
          The overloaded constructor.
 
Method Summary
 void close()
          Closes the underneath input and output stream that were opened.
protected  void finalize()
          Closes the open connections to the streams whenever this object is destroyed.
 void redirect(OutputStream ops, String prompt)
          Sets the output stream to which to redirect the contents of the input stream.
 void run()
          The main method of the gobbler, that does all the work.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

mIPStream

private InputStream mIPStream
The input stream that is to be read from.


mOPStream

private OutputStream mOPStream
The output stream to which the contents have to be redirected to.


mCallback

private StreamGobblerCallback mCallback
The callback to be used.


mPrompt

private String mPrompt
The prompt that is to be written to the output stream.


mStarted

private boolean mStarted
A boolean indicating whether the thread has started or not.


mLogger

private LogManager mLogger
The handle to the logging object.

Constructor Detail

StreamGobbler

public StreamGobbler(InputStream is,
                     StreamGobblerCallback callback)
The overloaded constructor.

Parameters:
is - the input stream from which to read from.
callback - the callback to call when a line is read.
Method Detail

redirect

public void redirect(OutputStream ops,
                     String prompt)
Sets the output stream to which to redirect the contents of the input stream.

Parameters:
ops - the output stream.
prompt - the prompt for the output stream.

run

public void run()
The main method of the gobbler, that does all the work.

Specified by:
run in interface Runnable
Overrides:
run in class Thread

finalize

protected void finalize()
Closes the open connections to the streams whenever this object is destroyed.

Overrides:
finalize in class Object

close

public void close()
Closes the underneath input and output stream that were opened.



Copyright © 2011 The University of Southern California. All Rights Reserved.