blob: 81bdda36fbdbc8a9c8245a4c0d5a232036acc366 [file] [log] [blame]
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
// * with the License. You may obtain a copy of the License at *
// * *
// * http://www.apache.org/licenses/LICENSE-2.0 *
// * *
// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
// * specific language governing permissions and limitations under the License. *
// ***************************************************************************************************************************
package org.apache.juneau.internal;
import java.io.*;
/**
* Similar to {@link StringWriter}, but uses a {@link StringBuilder} instead to avoid synchronization overhead.
*
* <p>
* Note that this class is NOT thread safe.
*/
public final class StringBuilderWriter extends Writer {
private StringBuilder sb;
/**
* Create a new string writer using the default initial string-builder size.
*/
public StringBuilderWriter() {
sb = new StringBuilder();
lock = null;
}
/**
* Create a new string writer around an existing string builder.
*
* @param sb The string builder being wrapped.
*/
public StringBuilderWriter(StringBuilder sb) {
this.sb = sb;
lock = null;
}
/**
* Create a new string writer using the specified initial string-builder size.
*
* @param initialSize
* The number of <tt>char</tt> values that will fit into this buffer before it is automatically expanded.
* @throws IllegalArgumentException If <tt>initialSize</tt> is negative.
*/
public StringBuilderWriter(int initialSize) {
sb = new StringBuilder(initialSize);
lock = null;
}
@Override /* Writer */
public void write(int c) {
sb.append((char) c);
}
@Override /* Writer */
public void write(char cbuf[], int start, int length) {
sb.append(cbuf, start, length);
}
@Override /* Writer */
public void write(String str) {
sb.append(str);
}
@Override /* Writer */
public void write(String str, int off, int len) {
sb.append(str.substring(off, off + len));
}
@Override /* Writer */
public StringBuilderWriter append(CharSequence csq) {
if (csq == null)
write("null");
else
write(csq.toString());
return this;
}
@Override /* Writer */
public StringBuilderWriter append(CharSequence csq, int start, int end) {
CharSequence cs = (csq == null ? "null" : csq);
write(cs.subSequence(start, end).toString());
return this;
}
@Override /* Writer */
public StringBuilderWriter append(char c) {
write(c);
return this;
}
@Override /* Object */
public String toString() {
return sb.toString();
}
@Override /* Writer */
public void flush() {}
@Override /* Writer */
public void close() throws IOException {}
}