package org.json; import java.io.IOException; import java.io.Writer; /** * Performance optimised alternative for {@link java.io.StringWriter} * using internally a {@link StringBuilder} instead of a {@link StringBuffer}. */ class StringBuilderWriter extends Writer { private final StringBuilder builder; StringBuilderWriter() { builder = new StringBuilder(); lock = builder; } StringBuilderWriter(int initialSize) { if (initialSize < 0) { throw new IllegalArgumentException("Negative buffer size"); } builder = new StringBuilder(initialSize); lock = builder; } @Override public void write(int c) { builder.append((char) c); } @Override public void write(char cbuf[], int offset, int length) { if ((offset < 0) || (offset > cbuf.length) || (length < 0) || ((offset + length) > cbuf.length) || ((offset + length) < 0)) { throw new IndexOutOfBoundsException(); } else if (length == 0) { return; } builder.append(cbuf, offset, length); } @Override public void write(String str) { builder.append(str); } @Override public void write(String str, int offset, int length) { builder.append(str, offset, offset + length); } @Override public StringBuilderWriter append(CharSequence csq) { write(String.valueOf(csq)); return this; } @Override public StringBuilderWriter append(CharSequence csq, int start, int end) { if (csq == null) csq = "null"; return append(csq.subSequence(start, end)); } @Override public StringBuilderWriter append(char c) { write(c); return this; } @Override public String toString() { return builder.toString(); } @Override public void flush() { } @Override public void close() throws IOException { } }