CharArrayWriter.java :  » 6.0-JDK-Modules » j2me » java » io » Java Open Source

Java Open Source » 6.0 JDK Modules » j2me 
j2me » java » io » CharArrayWriter.java
/*
 * @(#)CharArrayWriter.java  1.22 06/10/10
 *
 * Copyright  1990-2006 Sun Microsystems, Inc. All Rights Reserved.  
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER  
 *   
 * This program is free software; you can redistribute it and/or  
 * modify it under the terms of the GNU General Public License version  
 * 2 only, as published by the Free Software Foundation.   
 *   
 * This program is distributed in the hope that it will be useful, but  
 * WITHOUT ANY WARRANTY; without even the implied warranty of  
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU  
 * General Public License version 2 for more details (a copy is  
 * included at /legal/license.txt).   
 *   
 * You should have received a copy of the GNU General Public License  
 * version 2 along with this work; if not, write to the Free Software  
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  
 * 02110-1301 USA   
 *   
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa  
 * Clara, CA 95054 or visit www.sun.com if you need additional  
 * information or have any questions. 
 *
 */

package java.io;

/**
 * This class implements a character buffer that can be used as an Writer.
 * The buffer automatically grows when data is written to the stream.  The data
 * can be retrieved using toCharArray() and toString().
 *
 * @author  Herb Jellinek
 * @version   1.15, 02/02/00
 * @since       JDK1.1
 */
public
class CharArrayWriter extends Writer {
    /**
     * The buffer where data is stored.
     */
    protected char buf[];

    /**
     * The number of chars in the buffer.
     */
    protected int count;

    /**
     * Creates a new CharArrayWriter.
     */
    public CharArrayWriter() {
  this(32);
    }

    /**
     * Creates a new CharArrayWriter with the specified initial size.
     *
     * @param initialSize  an int specifying the initial buffer size.
     * @exception IllegalArgumentException if initialSize is negative
     */
    public CharArrayWriter(int initialSize) {
        if (initialSize < 0) {
            throw new IllegalArgumentException("Negative initial size: "
                 + initialSize);
        }
  buf = new char[initialSize];
    }

    /**
     * Writes a character to the buffer.
     */
    public void write(int c) {
  synchronized (lock) {
      int newcount = count + 1;
      if (newcount > buf.length) {
    char newbuf[] = new char[Math.max(buf.length << 1, newcount)];
    System.arraycopy(buf, 0, newbuf, 0, count);
    buf = newbuf;
      }
      buf[count] = (char)c;
      count = newcount;
  }
    }

    /**
     * Writes characters to the buffer.
     * @param c  the data to be written
     * @param off  the start offset in the data
     * @param len  the number of chars that are written
     */
    public void write(char c[], int off, int len) {
  if ((off < 0) || (off > c.length) || (len < 0) ||
            ((off + len) > c.length) || ((off + len) < 0)) {
      throw new IndexOutOfBoundsException();
  } else if (len == 0) {
      return;
  }
  synchronized (lock) {
      int newcount = count + len;
      if (newcount > buf.length) {
    char newbuf[] = new char[Math.max(buf.length << 1, newcount)];
    System.arraycopy(buf, 0, newbuf, 0, count);
    buf = newbuf;
      }
      System.arraycopy(c, off, buf, count, len);
      count = newcount;
  }
    }

    /**
     * Write a portion of a string to the buffer.
     * @param  str  String to be written from
     * @param  off  Offset from which to start reading characters
     * @param  len  Number of characters to be written
     */
    public void write(String str, int off, int len) {
  synchronized (lock) {
      int newcount = count + len;
      if (newcount > buf.length) {
    char newbuf[] = new char[Math.max(buf.length << 1, newcount)];
    System.arraycopy(buf, 0, newbuf, 0, count);
    buf = newbuf;
      }
      str.getChars(off, off + len, buf, count);
      count = newcount;
  }
    }

    /**
     * Writes the contents of the buffer to another character stream.
     *
     * @param out  the output stream to write to
     * @throws IOException If an I/O error occurs.
     */
    public void writeTo(Writer out) throws IOException {
  synchronized (lock) {
      out.write(buf, 0, count);
  }
    }

    /**
     * Resets the buffer so that you can use it again without
     * throwing away the already allocated buffer.
     */
    public void reset() {
  count = 0;
    }

    /**
     * Returns a copy of the input data.
     *
     * @return an array of chars copied from the input data.
     */
    public char toCharArray()[] {
  synchronized (lock) {
      char newbuf[] = new char[count];
      System.arraycopy(buf, 0, newbuf, 0, count);
      return newbuf;
  }
    }

    /**
     * Returns the current size of the buffer.
     *
     * @return an int representing the current size of the buffer.
     */
    public int size() {
  return count;
    }

    /**
     * Converts input data to a string.
     * @return the string.
     */
    public String toString() {
  synchronized (lock) {
      return new String(buf, 0, count);
  }
    }

    /**
     * Flush the stream.
     */
    public void flush() { }

    /**
     * Close the stream.  This method does not release the buffer, since its
     * contents might still be required.
     */
    public void close() { }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.