// CharArrayWriter.java - Character array output stream. /* Copyright (C) 1998, 1999 Cygnus Solutions This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package java.io; /** * @author Tom Tromey * @date September 25, 1998 */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Complete to 1.1. */ public class CharArrayWriter extends Writer { public CharArrayWriter () { this (32); } public CharArrayWriter (int size) { super (); buf = new char[size]; } public void close () { // JCL says this does nothing. This seems to violate the Writer // contract, in that other methods should still throw and // IOException after a close. Still, we just follow JCL. } public void flush () { } public synchronized void reset () { count = 0; } public int size () { return count; } public char[] toCharArray () { char[] nc = new char[count]; System.arraycopy(buf, 0, nc, 0, count); return nc; } public String toString () { return new String (buf, 0, count); } public void write (int oneChar) { synchronized (lock) { resize (1); buf[count++] = (char) oneChar; } } public void write (char[] buffer, int offset, int len) { synchronized (lock) { if (len >= 0) resize (len); System.arraycopy(buffer, offset, buf, count, len); count += len; } } public void write (String str, int offset, int len) { synchronized (lock) { if (len >= 0) resize (len); str.getChars(offset, offset + len, buf, count); count += len; } } public void writeTo (Writer out) throws IOException { out.write(buf, 0, count); } private final void resize (int len) { if (count + len >= buf.length) { int newlen = buf.length * 2; if (count + len > newlen) newlen = count + len; char[] newbuf = new char[newlen]; System.arraycopy(buf, 0, newbuf, 0, count); buf = newbuf; } } // The character buffer. protected char[] buf; // Number of valid characters in buffer. protected int count; }