gcc/libjava/java/io/CharArrayWriter.java

152 lines
2.7 KiB
Java
Raw Normal View History

1999-04-07 16:42:40 +02:00
// CharArrayWriter.java - Character array output stream.
/* Copyright (C) 1998, 1999, 2001 Free Software Foundation
1999-04-07 16:42:40 +02:00
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 <tromey@cygnus.com>
* @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 ()
{
closed = true;
1999-04-07 16:42:40 +02:00
}
public void flush () throws IOException
1999-04-07 16:42:40 +02:00
{
synchronized (lock)
{
if (closed)
throw new IOException ("Stream closed");
}
1999-04-07 16:42:40 +02:00
}
public void reset ()
1999-04-07 16:42:40 +02:00
{
synchronized (lock)
{
count = 0;
// Allow this to reopen the stream.
// FIXME - what does the JDK do?
closed = false;
}
1999-04-07 16:42:40 +02:00
}
public int size ()
{
return count;
}
public char[] toCharArray ()
{
synchronized (lock)
{
char[] nc = new char[count];
System.arraycopy(buf, 0, nc, 0, count);
return nc;
}
1999-04-07 16:42:40 +02:00
}
public String toString ()
{
synchronized (lock)
{
return new String (buf, 0, count);
}
1999-04-07 16:42:40 +02:00
}
public void write (int oneChar) throws IOException
1999-04-07 16:42:40 +02:00
{
synchronized (lock)
{
if (closed)
throw new IOException ("Stream closed");
1999-04-07 16:42:40 +02:00
resize (1);
buf[count++] = (char) oneChar;
}
}
public void write (char[] buffer, int offset, int len) throws IOException
1999-04-07 16:42:40 +02:00
{
synchronized (lock)
{
if (closed)
throw new IOException ("Stream closed");
1999-04-07 16:42:40 +02:00
if (len >= 0)
resize (len);
System.arraycopy(buffer, offset, buf, count, len);
count += len;
}
}
public void write (String str, int offset, int len) throws IOException
1999-04-07 16:42:40 +02:00
{
synchronized (lock)
{
if (closed)
throw new IOException ("Stream closed");
1999-04-07 16:42:40 +02:00
if (len >= 0)
resize (len);
str.getChars(offset, offset + len, buf, count);
count += len;
}
}
public void writeTo (Writer out) throws IOException
{
synchronized (lock)
{
out.write(buf, 0, count);
}
1999-04-07 16:42:40 +02:00
}
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;
// True if stream is closed.
private boolean closed;
1999-04-07 16:42:40 +02:00
}