Package com.enterprisedt.util.debug

Source Code of com.enterprisedt.util.debug.MemoryAppender

package com.enterprisedt.util.debug;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Reader;

/**
* Appends log statements to an in-memory buffer.
*
@author      Hans Andersen
@version     $Revision$
*/
public class MemoryAppender extends StreamAppender {

  /**
   * Default size of memory-buffer (100k).
   */
  public final static int DEFAULT_BUFFER_SIZE = 100*1024;
 
  /**
   * Create a MemoryAppender whose buffer has the given initial size.
   * @param size Initial size of buffer.
   */
  public MemoryAppender(int initSize) {
    super(new ByteArrayOutputStream(initSize));
  }
 
  /**
   * Create a MemoryAppender whose buffer is initially set to 100k.
   */
  public MemoryAppender() {
    this(DEFAULT_BUFFER_SIZE);
  }
 
  /**
   * Returns the current buffer.
   * @return the current buffer.
   */
  public byte[] getBuffer() {
    synchronized (log) {
      log.flush();
      return ((ByteArrayOutputStream)outStr).toByteArray();
    }
  }
 
  /**
   * Returns a reader that may be used to access the current buffer.
   * A snapshot of the buffer is taken at the time of invocation;
   * any logging written to the appender after the invocation will not
   * be accessible through the reader.
   * @return A reader for the current buffer.
   */
  public Reader getReader() {
    return new BufferedReader(new InputStreamReader(new ByteArrayInputStream(getBuffer())));
  }
 
    /* (non-Javadoc)
     * @see java.lang.String.toString()
     */
  public String toString() {
    return new String(getBuffer());
  }
 
  /**
   * Writes the entire buffer to the given writer.
   * @param writer Writer to write to.
   */
  public void print(PrintStream stream) {
    BufferedReader reader = new BufferedReader(getReader());
    String line = null;
    try {
      while ((line=reader.readLine())!=null)
        stream.println(line);
    } catch (IOException e) {
      e.printStackTrace(stream);
    }
  }
 
  /**
   * Writes the entire buffer to stdout.
   */
  public void print() {
    print(System.out);
  }
}
TOP

Related Classes of com.enterprisedt.util.debug.MemoryAppender

TOP
Copyright © 2015 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.