Hi,
I have written this class to redirect PumpStreamHandler.outputStream to a
Reader and splitting the stream into lines. I don't like my solution very
much. Any ideas for a better implementation?
outputStream = new OutputStreamConsumer(consumer, this.getCharsetName());
PumpStreamHandler handler = new PumpStreamHandler(outputStream, errorStream,
inputStream);
...
public class OutputStreamConsumer extends ByteArrayOutputStream {
private ScmStreamLineConsumer consumer;
private String charsetName;
private StringBuffer buffer = new StringBuffer();
public OutputStreamConsumer(ScmStreamLineConsumer consumer, String
charsetName) {
this.consumer = consumer;
this.charsetName = StringUtils.trimToNull(charsetName);
}
public void write(byte b[], int off, int len) {
if (len > 0) {
try {
String string = charsetName != null ? new
String(b, off, len, charsetName) : new String(b, off, len);
buffer.append(string);
checkForNewLine();
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex);
}
}
}
public void write(int b) {
byte[] content = new byte[1];
content[0] = (byte)b;
write(content, 0, 1);
}
protected void checkForNewLine() {
for (int off = -1; (off = buffer.indexOf("\n")) != -1; ) {
String line = null;
if (off == 0) {
line = "";
} else {
line = buffer.substring(0, off - 1);
}
buffer.delete(0, off + 1);
consumer.consumeLine(line);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org
|