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