/*
* Copyright (C) 2004, 2005, 2006 Joe Walnes.
* Copyright (C) 2006, 2007 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
* style license a copy of which has been included with this distribution in
* the LICENSE.txt file.
*
* Created on 07. March 2004 by Joe Walnes
*/
package com.thoughtworks.xstream.core.util;
import com.thoughtworks.xstream.io.StreamException;
import java.io.IOException;
import java.io.Writer;
public class QuickWriter {
private final Writer writer;
private char[] buffer;
private int pointer;
public QuickWriter(Writer writer) {
this(writer, 1024);
}
public QuickWriter(Writer writer, int bufferSize) {
this.writer = writer;
buffer = new char[bufferSize];
}
public void write(String str) {
int len = str.length();
if (pointer + len >= buffer.length) {
flush();
if (len > buffer.length) {
raw(str.toCharArray());
return;
}
}
str.getChars(0, len, buffer, pointer);
pointer += len;
}
public void write(char c) {
if (pointer + 1 >= buffer.length) {
flush();
}
buffer[pointer++] = c;
}
public void write(char[] c) {
int len = c.length;
if (pointer + len >= buffer.length) {
flush();
if (len > buffer.length) {
raw(c);
return;
}
}
System.arraycopy(c, 0, buffer, pointer, len);
pointer += len;
}
public void flush() {
try {
writer.write(buffer, 0, pointer);
pointer = 0;
writer.flush();
} catch (IOException e) {
throw new StreamException(e);
}
}
public void close() {
try {
writer.write(buffer, 0, pointer);
pointer = 0;
writer.close();
} catch (IOException e) {
throw new StreamException(e);
}
}
private void raw(char[] c) {
try {
writer.write(c);
writer.flush();
} catch (IOException e) {
throw new StreamException(e);
}
}
}