blob: f62f9e594ddd1b8c2548481b243726c1ad38cc7b [file] [log] [blame]
package com.gemstone.gemfire.internal.process;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.logging.log4j.Logger;
import com.gemstone.gemfire.internal.logging.LogService;
/**
* Reads the output stream of a Process. Default implementation performs blocking
* per-line reading of the InputStream.
*
* Extracted from ProcessStreamReader.
*
* @author Kirk Lund
* @since 8.2
*/
public final class BlockingProcessStreamReader extends ProcessStreamReader {
private static final Logger logger = LogService.getLogger();
protected BlockingProcessStreamReader(final Builder builder) {
super(builder);
}
@Override
public void run() {
final boolean isDebugEnabled = logger.isDebugEnabled();
if (isDebugEnabled) {
logger.debug("Running {}", this);
}
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
this.inputListener.notifyInputLine(line);
}
} catch (IOException e) {
if (isDebugEnabled) {
logger.debug("Failure reading from buffered input stream: {}", e.getMessage(), e);
}
} finally {
try {
reader.close();
} catch (IOException e) {
if (isDebugEnabled) {
logger.debug("Failure closing buffered input stream reader: {}", e.getMessage(), e);
}
}
if (isDebugEnabled) {
logger.debug("Terminating {}", this);
}
}
}
}