一、前言
关于apache的commons-io包org.apache.commons.io.IOUtils输入输出工具类,对输入输出或套接字进行关闭closeQuietly、输入流转换二进制toByteArray、输入流转换为字符串toString、字符串转换输入流toInputStream、写出二进制数据到输出流文件write、从不同输出流文件复制到输出流或文件copy等。
二、源码说明
1.IOUtils工具类
package org.apache.commons.io;@b@@b@import java.io.BufferedInputStream;@b@import java.io.BufferedReader;@b@import java.io.ByteArrayInputStream;@b@import java.io.CharArrayWriter;@b@import java.io.Closeable;@b@import java.io.EOFException;@b@import java.io.File;@b@import java.io.IOException;@b@import java.io.InputStream;@b@import java.io.InputStreamReader;@b@import java.io.OutputStream;@b@import java.io.OutputStreamWriter;@b@import java.io.PrintWriter;@b@import java.io.Reader;@b@import java.io.Writer;@b@import java.net.Socket;@b@import java.util.ArrayList;@b@import java.util.Collection;@b@import java.util.Iterator;@b@import java.util.List;@b@import org.apache.commons.io.output.ByteArrayOutputStream;@b@import org.apache.commons.io.output.StringBuilderWriter;@b@@b@public class IOUtils@b@{@b@ public static final char DIR_SEPARATOR_UNIX = 47;@b@ public static final char DIR_SEPARATOR_WINDOWS = 92;@b@ public static final char DIR_SEPARATOR = File.separatorChar;@b@ public static final String LINE_SEPARATOR_UNIX = "\n";@b@ public static final String LINE_SEPARATOR_WINDOWS = "\r\n";@b@ public static final String LINE_SEPARATOR;@b@ private static final int DEFAULT_BUFFER_SIZE = 4096;@b@ private static final int SKIP_BUFFER_SIZE = 2048;@b@ private static char[] SKIP_CHAR_BUFFER;@b@ private static byte[] SKIP_BYTE_BUFFER;@b@@b@ public static void closeQuietly(Reader input)@b@ {@b@ closeQuietly(input);@b@ }@b@@b@ public static void closeQuietly(Writer output)@b@ {@b@ closeQuietly(output);@b@ }@b@@b@ public static void closeQuietly(InputStream input)@b@ {@b@ closeQuietly(input);@b@ }@b@@b@ public static void closeQuietly(OutputStream output)@b@ {@b@ closeQuietly(output);@b@ }@b@@b@ public static void closeQuietly(Closeable closeable)@b@ {@b@ try@b@ {@b@ if (closeable != null)@b@ closeable.close();@b@ }@b@ catch (IOException ioe)@b@ {@b@ }@b@ }@b@@b@ public static void closeQuietly(Socket sock)@b@ {@b@ if (sock != null)@b@ try {@b@ sock.close();@b@ }@b@ catch (IOException ioe)@b@ {@b@ }@b@ }@b@@b@ public static InputStream toBufferedInputStream(InputStream input)@b@ throws IOException@b@ {@b@ return ByteArrayOutputStream.toBufferedInputStream(input);@b@ }@b@@b@ public static byte[] toByteArray(InputStream input)@b@ throws IOException@b@ {@b@ ByteArrayOutputStream output = new ByteArrayOutputStream();@b@ copy(input, output);@b@ return output.toByteArray();@b@ }@b@@b@ public static byte[] toByteArray(Reader input)@b@ throws IOException@b@ {@b@ ByteArrayOutputStream output = new ByteArrayOutputStream();@b@ copy(input, output);@b@ return output.toByteArray();@b@ }@b@@b@ public static byte[] toByteArray(Reader input, String encoding)@b@ throws IOException@b@ {@b@ ByteArrayOutputStream output = new ByteArrayOutputStream();@b@ copy(input, output, encoding);@b@ return output.toByteArray();@b@ }@b@@b@ @Deprecated@b@ public static byte[] toByteArray(String input)@b@ throws IOException@b@ {@b@ return input.getBytes();@b@ }@b@@b@ public static char[] toCharArray(InputStream is)@b@ throws IOException@b@ {@b@ CharArrayWriter output = new CharArrayWriter();@b@ copy(is, output);@b@ return output.toCharArray();@b@ }@b@@b@ public static char[] toCharArray(InputStream is, String encoding)@b@ throws IOException@b@ {@b@ CharArrayWriter output = new CharArrayWriter();@b@ copy(is, output, encoding);@b@ return output.toCharArray();@b@ }@b@@b@ public static char[] toCharArray(Reader input)@b@ throws IOException@b@ {@b@ CharArrayWriter sw = new CharArrayWriter();@b@ copy(input, sw);@b@ return sw.toCharArray();@b@ }@b@@b@ public static String toString(InputStream input)@b@ throws IOException@b@ {@b@ StringBuilderWriter sw = new StringBuilderWriter();@b@ copy(input, sw);@b@ return sw.toString();@b@ }@b@@b@ public static String toString(InputStream input, String encoding)@b@ throws IOException@b@ {@b@ StringBuilderWriter sw = new StringBuilderWriter();@b@ copy(input, sw, encoding);@b@ return sw.toString();@b@ }@b@@b@ public static String toString(Reader input)@b@ throws IOException@b@ {@b@ StringBuilderWriter sw = new StringBuilderWriter();@b@ copy(input, sw);@b@ return sw.toString();@b@ }@b@@b@ @Deprecated@b@ public static String toString(byte[] input)@b@ throws IOException@b@ {@b@ return new String(input);@b@ }@b@@b@ @Deprecated@b@ public static String toString(byte[] input, String encoding)@b@ throws IOException@b@ {@b@ if (encoding == null)@b@ return new String(input);@b@@b@ return new String(input, encoding);@b@ }@b@@b@ public static List<String> readLines(InputStream input)@b@ throws IOException@b@ {@b@ InputStreamReader reader = new InputStreamReader(input);@b@ return readLines(reader);@b@ }@b@@b@ public static List<String> readLines(InputStream input, String encoding)@b@ throws IOException@b@ {@b@ if (encoding == null)@b@ return readLines(input);@b@@b@ InputStreamReader reader = new InputStreamReader(input, encoding);@b@ return readLines(reader);@b@ }@b@@b@ public static List<String> readLines(Reader input)@b@ throws IOException@b@ {@b@ BufferedReader reader = new BufferedReader(input);@b@ List list = new ArrayList();@b@ String line = reader.readLine();@b@ while (line != null) {@b@ list.add(line);@b@ line = reader.readLine();@b@ }@b@ return list;@b@ }@b@@b@ public static LineIterator lineIterator(Reader reader)@b@ {@b@ return new LineIterator(reader);@b@ }@b@@b@ public static LineIterator lineIterator(InputStream input, String encoding)@b@ throws IOException@b@ {@b@ Reader reader = null;@b@ if (encoding == null)@b@ reader = new InputStreamReader(input);@b@ else@b@ reader = new InputStreamReader(input, encoding);@b@@b@ return new LineIterator(reader);@b@ }@b@@b@ public static InputStream toInputStream(CharSequence input)@b@ {@b@ return toInputStream(input.toString());@b@ }@b@@b@ public static InputStream toInputStream(CharSequence input, String encoding)@b@ throws IOException@b@ {@b@ return toInputStream(input.toString(), encoding);@b@ }@b@@b@ public static InputStream toInputStream(String input)@b@ {@b@ byte[] bytes = input.getBytes();@b@ return new ByteArrayInputStream(bytes);@b@ }@b@@b@ public static InputStream toInputStream(String input, String encoding)@b@ throws IOException@b@ {@b@ byte[] bytes = (encoding != null) ? input.getBytes(encoding) : input.getBytes();@b@ return new ByteArrayInputStream(bytes);@b@ }@b@@b@ public static void write(byte[] data, OutputStream output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(data);@b@ }@b@@b@ public static void write(byte[] data, Writer output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(new String(data));@b@ }@b@@b@ public static void write(byte[] data, Writer output, String encoding)@b@ throws IOException@b@ {@b@ if (data != null)@b@ if (encoding == null)@b@ write(data, output);@b@ else@b@ output.write(new String(data, encoding));@b@ }@b@@b@ public static void write(char[] data, Writer output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(data);@b@ }@b@@b@ public static void write(char[] data, OutputStream output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(new String(data).getBytes());@b@ }@b@@b@ public static void write(char[] data, OutputStream output, String encoding)@b@ throws IOException@b@ {@b@ if (data != null)@b@ if (encoding == null)@b@ write(data, output);@b@ else@b@ output.write(new String(data).getBytes(encoding));@b@ }@b@@b@ public static void write(CharSequence data, Writer output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ write(data.toString(), output);@b@ }@b@@b@ public static void write(CharSequence data, OutputStream output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ write(data.toString(), output);@b@ }@b@@b@ public static void write(CharSequence data, OutputStream output, String encoding)@b@ throws IOException@b@ {@b@ if (data != null)@b@ write(data.toString(), output, encoding);@b@ }@b@@b@ public static void write(String data, Writer output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(data);@b@ }@b@@b@ public static void write(String data, OutputStream output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(data.getBytes());@b@ }@b@@b@ public static void write(String data, OutputStream output, String encoding)@b@ throws IOException@b@ {@b@ if (data != null)@b@ if (encoding == null)@b@ write(data, output);@b@ else@b@ output.write(data.getBytes(encoding));@b@ }@b@@b@ @Deprecated@b@ public static void write(StringBuffer data, Writer output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(data.toString());@b@ }@b@@b@ @Deprecated@b@ public static void write(StringBuffer data, OutputStream output)@b@ throws IOException@b@ {@b@ if (data != null)@b@ output.write(data.toString().getBytes());@b@ }@b@@b@ @Deprecated@b@ public static void write(StringBuffer data, OutputStream output, String encoding)@b@ throws IOException@b@ {@b@ if (data != null)@b@ if (encoding == null)@b@ write(data, output);@b@ else@b@ output.write(data.toString().getBytes(encoding));@b@ }@b@@b@ public static void writeLines(Collection<?> lines, String lineEnding, OutputStream output)@b@ throws IOException@b@ {@b@ if (lines == null)@b@ return;@b@@b@ if (lineEnding == null)@b@ lineEnding = LINE_SEPARATOR;@b@@b@ for (Iterator i$ = lines.iterator(); i$.hasNext(); ) { Object line = i$.next();@b@ if (line != null)@b@ output.write(line.toString().getBytes());@b@@b@ output.write(lineEnding.getBytes());@b@ }@b@ }@b@@b@ public static void writeLines(Collection<?> lines, String lineEnding, OutputStream output, String encoding)@b@ throws IOException@b@ {@b@ Iterator i$;@b@ if (encoding == null) {@b@ writeLines(lines, lineEnding, output);@b@ } else {@b@ if (lines == null)@b@ return;@b@@b@ if (lineEnding == null)@b@ lineEnding = LINE_SEPARATOR;@b@@b@ for (i$ = lines.iterator(); i$.hasNext(); ) { Object line = i$.next();@b@ if (line != null)@b@ output.write(line.toString().getBytes(encoding));@b@@b@ output.write(lineEnding.getBytes(encoding));@b@ }@b@ }@b@ }@b@@b@ public static void writeLines(Collection<?> lines, String lineEnding, Writer writer)@b@ throws IOException@b@ {@b@ if (lines == null)@b@ return;@b@@b@ if (lineEnding == null)@b@ lineEnding = LINE_SEPARATOR;@b@@b@ for (Iterator i$ = lines.iterator(); i$.hasNext(); ) { Object line = i$.next();@b@ if (line != null)@b@ writer.write(line.toString());@b@@b@ writer.write(lineEnding);@b@ }@b@ }@b@@b@ public static int copy(InputStream input, OutputStream output)@b@ throws IOException@b@ {@b@ long count = copyLarge(input, output);@b@ if (count > 2147483647L)@b@ return -1;@b@@b@ return (int)count;@b@ }@b@@b@ public static long copyLarge(InputStream input, OutputStream output)@b@ throws IOException@b@ {@b@ byte[] buffer = new byte[4096];@b@ long count = 0L;@b@ int n = 0;@b@ while (-1 != (n = input.read(buffer))) {@b@ output.write(buffer, 0, n);@b@ count += n;@b@ }@b@ return count;@b@ }@b@@b@ public static void copy(InputStream input, Writer output)@b@ throws IOException@b@ {@b@ InputStreamReader in = new InputStreamReader(input);@b@ copy(in, output);@b@ }@b@@b@ public static void copy(InputStream input, Writer output, String encoding)@b@ throws IOException@b@ {@b@ if (encoding == null) {@b@ copy(input, output);@b@ } else {@b@ InputStreamReader in = new InputStreamReader(input, encoding);@b@ copy(in, output);@b@ }@b@ }@b@@b@ public static int copy(Reader input, Writer output)@b@ throws IOException@b@ {@b@ long count = copyLarge(input, output);@b@ if (count > 2147483647L)@b@ return -1;@b@@b@ return (int)count;@b@ }@b@@b@ public static long copyLarge(Reader input, Writer output)@b@ throws IOException@b@ {@b@ char[] buffer = new char[4096];@b@ long count = 0L;@b@ int n = 0;@b@ while (-1 != (n = input.read(buffer))) {@b@ output.write(buffer, 0, n);@b@ count += n;@b@ }@b@ return count;@b@ }@b@@b@ public static void copy(Reader input, OutputStream output)@b@ throws IOException@b@ {@b@ OutputStreamWriter out = new OutputStreamWriter(output);@b@ copy(input, out);@b@@b@ out.flush();@b@ }@b@@b@ public static void copy(Reader input, OutputStream output, String encoding)@b@ throws IOException@b@ {@b@ if (encoding == null) {@b@ copy(input, output);@b@ } else {@b@ OutputStreamWriter out = new OutputStreamWriter(output, encoding);@b@ copy(input, out);@b@@b@ out.flush();@b@ }@b@ }@b@@b@ public static boolean contentEquals(InputStream input1, InputStream input2)@b@ throws IOException@b@ {@b@ if (!(input1 instanceof BufferedInputStream))@b@ input1 = new BufferedInputStream(input1);@b@@b@ if (!(input2 instanceof BufferedInputStream)) {@b@ input2 = new BufferedInputStream(input2);@b@ }@b@@b@ int ch = input1.read();@b@ while (-1 != ch) {@b@ ch2 = input2.read();@b@ if (ch != ch2)@b@ return false;@b@@b@ ch = input1.read();@b@ }@b@@b@ int ch2 = input2.read();@b@ return (ch2 == -1);@b@ }@b@@b@ public static boolean contentEquals(Reader input1, Reader input2)@b@ throws IOException@b@ {@b@ if (!(input1 instanceof BufferedReader))@b@ input1 = new BufferedReader(input1);@b@@b@ if (!(input2 instanceof BufferedReader)) {@b@ input2 = new BufferedReader(input2);@b@ }@b@@b@ int ch = input1.read();@b@ while (-1 != ch) {@b@ ch2 = input2.read();@b@ if (ch != ch2)@b@ return false;@b@@b@ ch = input1.read();@b@ }@b@@b@ int ch2 = input2.read();@b@ return (ch2 == -1);@b@ }@b@@b@ public static long skip(InputStream input, long toSkip)@b@ throws IOException@b@ {@b@ if (toSkip < 0L) {@b@ throw new IllegalArgumentException("Skip count must be non-negative, actual: " + toSkip);@b@ }@b@@b@ if (SKIP_BYTE_BUFFER == null)@b@ SKIP_BYTE_BUFFER = new byte[2048];@b@@b@ long remain = toSkip;@b@ while (remain > 0L) {@b@ long n = input.read(SKIP_BYTE_BUFFER, 0, (int)Math.min(remain, 2048L));@b@ if (n < 0L)@b@ break;@b@@b@ remain -= n;@b@ }@b@ return (toSkip - remain);@b@ }@b@@b@ public static long skip(Reader input, long toSkip)@b@ throws IOException@b@ {@b@ if (toSkip < 0L) {@b@ throw new IllegalArgumentException("Skip count must be non-negative, actual: " + toSkip);@b@ }@b@@b@ if (SKIP_CHAR_BUFFER == null)@b@ SKIP_CHAR_BUFFER = new char[2048];@b@@b@ long remain = toSkip;@b@ while (remain > 0L) {@b@ long n = input.read(SKIP_CHAR_BUFFER, 0, (int)Math.min(remain, 2048L));@b@ if (n < 0L)@b@ break;@b@@b@ remain -= n;@b@ }@b@ return (toSkip - remain);@b@ }@b@@b@ public static void skipFully(InputStream input, long toSkip)@b@ throws IOException@b@ {@b@ if (toSkip < 0L)@b@ throw new IllegalArgumentException("Bytes to skip must not be negative: " + toSkip);@b@@b@ long skipped = skip(input, toSkip);@b@ if (skipped != toSkip)@b@ throw new EOFException("Bytes to skip: " + toSkip + " actual: " + skipped);@b@ }@b@@b@ public static void skipFully(Reader input, long toSkip)@b@ throws IOException@b@ {@b@ long skipped = skip(input, toSkip);@b@ if (skipped != toSkip)@b@ throw new EOFException("Bytes to skip: " + toSkip + " actual: " + skipped);@b@ }@b@@b@ static@b@ {@b@ StringBuilderWriter buf = new StringBuilderWriter(4);@b@ PrintWriter out = new PrintWriter(buf);@b@ out.println();@b@ LINE_SEPARATOR = buf.toString();@b@ out.close();@b@ }@b@}
2.ByteArrayOutputStream
package org.apache.commons.io.output;@b@@b@import java.io.ByteArrayInputStream;@b@import java.io.IOException;@b@import java.io.InputStream;@b@import java.io.OutputStream;@b@import java.io.SequenceInputStream;@b@import java.io.UnsupportedEncodingException;@b@import java.util.ArrayList;@b@import java.util.Collections;@b@import java.util.List;@b@import org.apache.commons.io.input.ClosedInputStream;@b@@b@public class ByteArrayOutputStream extends OutputStream@b@{@b@ private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];@b@ private final List<byte[]> buffers;@b@ private int currentBufferIndex;@b@ private int filledBufferSum;@b@ private byte[] currentBuffer;@b@ private int count;@b@@b@ public ByteArrayOutputStream()@b@ {@b@ this(1024);@b@ }@b@@b@ public ByteArrayOutputStream(int size)@b@ {@b@ this.buffers = new ArrayList();@b@@b@ if (size < 0) {@b@ throw new IllegalArgumentException("Negative initial size: " + size);@b@ }@b@@b@ synchronized (this) {@b@ needNewBuffer(size);@b@ }@b@ }@b@@b@ private void needNewBuffer(int newcount)@b@ {@b@ if (this.currentBufferIndex < this.buffers.size() - 1)@b@ {@b@ this.filledBufferSum += this.currentBuffer.length;@b@@b@ this.currentBufferIndex += 1;@b@ this.currentBuffer = ((byte[])this.buffers.get(this.currentBufferIndex));@b@ }@b@ else@b@ {@b@ int newBufferSize;@b@ if (this.currentBuffer == null) {@b@ newBufferSize = newcount;@b@ this.filledBufferSum = 0;@b@ } else {@b@ newBufferSize = Math.max(this.currentBuffer.length << 1, newcount - this.filledBufferSum);@b@@b@ this.filledBufferSum += this.currentBuffer.length;@b@ }@b@@b@ this.currentBufferIndex += 1;@b@ this.currentBuffer = new byte[newBufferSize];@b@ this.buffers.add(this.currentBuffer);@b@ }@b@ }@b@@b@ public void write(byte[] b, int off, int len)@b@ {@b@ if ((off < 0) || (off > b.length) || (len < 0) || (off + len > b.length) || (off + len < 0))@b@ {@b@ throw new IndexOutOfBoundsException(); }@b@ if (len == 0)@b@ return;@b@@b@ synchronized (this) {@b@ int newcount = this.count + len;@b@ int remaining = len;@b@ int inBufferPos = this.count - this.filledBufferSum;@b@ while (remaining > 0) {@b@ int part = Math.min(remaining, this.currentBuffer.length - inBufferPos);@b@ System.arraycopy(b, off + len - remaining, this.currentBuffer, inBufferPos, part);@b@ remaining -= part;@b@ if (remaining > 0) {@b@ needNewBuffer(newcount);@b@ inBufferPos = 0;@b@ }@b@ }@b@ this.count = newcount;@b@ }@b@ }@b@@b@ public synchronized void write(int b)@b@ {@b@ int inBufferPos = this.count - this.filledBufferSum;@b@ if (inBufferPos == this.currentBuffer.length) {@b@ needNewBuffer(this.count + 1);@b@ inBufferPos = 0;@b@ }@b@ this.currentBuffer[inBufferPos] = (byte)b;@b@ this.count += 1;@b@ }@b@@b@ public synchronized int write(InputStream in)@b@ throws IOException@b@ {@b@ int readCount = 0;@b@ int inBufferPos = this.count - this.filledBufferSum;@b@ int n = in.read(this.currentBuffer, inBufferPos, this.currentBuffer.length - inBufferPos);@b@ while (n != -1) {@b@ readCount += n;@b@ inBufferPos += n;@b@ this.count += n;@b@ if (inBufferPos == this.currentBuffer.length) {@b@ needNewBuffer(this.currentBuffer.length);@b@ inBufferPos = 0;@b@ }@b@ n = in.read(this.currentBuffer, inBufferPos, this.currentBuffer.length - inBufferPos);@b@ }@b@ return readCount;@b@ }@b@@b@ public synchronized int size()@b@ {@b@ return this.count;@b@ }@b@@b@ public void close()@b@ throws IOException@b@ {@b@ }@b@@b@ public synchronized void reset()@b@ {@b@ this.count = 0;@b@ this.filledBufferSum = 0;@b@ this.currentBufferIndex = 0;@b@ this.currentBuffer = ((byte[])this.buffers.get(this.currentBufferIndex));@b@ }@b@@b@ public synchronized void writeTo(OutputStream out)@b@ throws IOException@b@ {@b@ int remaining = this.count;@b@ for (byte[] buf : this.buffers) {@b@ int c = Math.min(buf.length, remaining);@b@ out.write(buf, 0, c);@b@ remaining -= c;@b@ if (remaining == 0)@b@ return;@b@ }@b@ }@b@@b@ public static InputStream toBufferedInputStream(InputStream input)@b@ throws IOException@b@ {@b@ ByteArrayOutputStream output = new ByteArrayOutputStream();@b@ output.write(input);@b@ return output.toBufferedInputStream();@b@ }@b@@b@ private InputStream toBufferedInputStream()@b@ {@b@ int remaining = this.count;@b@ if (remaining == 0)@b@ return new ClosedInputStream();@b@@b@ List list = new ArrayList(this.buffers.size());@b@ for (byte[] buf : this.buffers) {@b@ int c = Math.min(buf.length, remaining);@b@ list.add(new ByteArrayInputStream(buf, 0, c));@b@ remaining -= c;@b@ if (remaining == 0)@b@ break;@b@ }@b@@b@ return new SequenceInputStream(Collections.enumeration(list));@b@ }@b@@b@ public synchronized byte[] toByteArray()@b@ {@b@ int remaining = this.count;@b@ if (remaining == 0)@b@ return EMPTY_BYTE_ARRAY;@b@@b@ byte[] newbuf = new byte[remaining];@b@ int pos = 0;@b@ for (byte[] buf : this.buffers) {@b@ int c = Math.min(buf.length, remaining);@b@ System.arraycopy(buf, 0, newbuf, pos, c);@b@ pos += c;@b@ remaining -= c;@b@ if (remaining == 0)@b@ break;@b@ }@b@@b@ return newbuf;@b@ }@b@@b@ public String toString()@b@ {@b@ return new String(toByteArray());@b@ }@b@@b@ public String toString(String enc)@b@ throws UnsupportedEncodingException@b@ {@b@ return new String(toByteArray(), enc);@b@ }@b@}
3.StringBuilderWriter
package org.apache.commons.io.output;@b@@b@import java.io.Serializable;@b@import java.io.Writer;@b@@b@public class StringBuilderWriter extends Writer@b@ implements Serializable@b@{@b@ private final StringBuilder builder;@b@@b@ public StringBuilderWriter()@b@ {@b@ this.builder = new StringBuilder();@b@ }@b@@b@ public StringBuilderWriter(int capacity)@b@ {@b@ this.builder = new StringBuilder(capacity);@b@ }@b@@b@ public StringBuilderWriter(StringBuilder builder)@b@ {@b@ this.builder = new StringBuilder();@b@ }@b@@b@ public Writer append(char value)@b@ {@b@ this.builder.append(value);@b@ return this;@b@ }@b@@b@ public Writer append(CharSequence value)@b@ {@b@ this.builder.append(value);@b@ return this;@b@ }@b@@b@ public Writer append(CharSequence value, int start, int end)@b@ {@b@ this.builder.append(value, start, end);@b@ return this;@b@ }@b@@b@ public void close()@b@ {@b@ }@b@@b@ public void flush()@b@ {@b@ }@b@@b@ public void write(String value)@b@ {@b@ if (value != null)@b@ this.builder.append(value);@b@ }@b@@b@ public void write(char[] value, int offset, int length)@b@ {@b@ if (value != null)@b@ this.builder.append(value, offset, length);@b@ }@b@@b@ public StringBuilder getBuilder()@b@ {@b@ return this.builder;@b@ }@b@@b@ public String toString()@b@ {@b@ return this.builder.toString();@b@ }@b@}