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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to