/* XXL: The eXtensible and fleXible Library for data processing Copyright (C) 2000-2011 Prof. Dr. Bernhard Seeger Head of the Database Research Group Department of Mathematics and Computer Science University of Marburg Germany This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; If not, see <http://www.gnu.org/licenses/>. http://code.google.com/p/xxl/ */ package xxl.core.io.converters; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; /** * This class provides a converter that is able to read and write string * buffers. This converter uses the <code>readUTF</code> and * <code>writeUTF</code> methods of a data output the read and write the string * representations of the string buffers. * * <p>Example usage (1). * <code><pre> * // create a byte array output stream * * ByteArrayOutputStream output = new ByteArrayOutputStream(); * * // write two string bufferss to the output stream * * StringBufferConverter.DEFAULT_INSTANCE.write(new DataOutputStream(output), new StringBuffer("Hello world!")); * StringBufferConverter.DEFAULT_INSTANCE.write(new DataOutputStream(output), new StringBuffer("That's all, folks!")); * * // create a byte array input stream on the output stream * * ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); * * // read two strings from the input stream * * StringBuffer s1 = StringBufferConverter.DEFAULT_INSTANCE.read(new DataInputStream(input)); * StringBuffer s2 = StringBufferConverter.DEFAULT_INSTANCE.read(new DataInputStream(input)); * * // print the value and the object * * System.out.println(s1); * System.out.println(s2); * * // close the streams after use * * input.close(); * output.close(); * </pre></code></p> * * @see DataInput * @see DataOutput * @see IOException */ public class StringBufferConverter extends Converter<StringBuffer> { /** * This instance can be used for getting a default instance of a string * buffer converter. It is similar to the <i>Singleton Design Pattern</i> * (for further details see Creational Patterns, Prototype in <i>Design * Patterns: Elements of Reusable Object-Oriented Software</i> by Erich * Gamma, Richard Helm, Ralph Johnson, and John Vlissides) except that * there are no mechanisms to avoid the creation of other instances of a * string buffer converter. */ public static final StringBufferConverter DEFAULT_INSTANCE = new StringBufferConverter(); /** * Reads in a string buffer for the specified object from the specified * data input and returns the restored object. * * <p>This implementation ignores the specified object and returns a new * string buffer. So it does not matter when the specified object is * <code>null</code>. The returned string buffer represents the * <code>String</code> object that is returned by the <code>readUTF</code> * method of the specified data input.</p> * * @param dataInput the stream to read a string from in order to return a * string buffer object that represents the read string. * @param object the string buffer to be restored. In this implementation * it is ignored. * @return the read string buffer. * @throws IOException if I/O errors occur. */ @Override public StringBuffer read(DataInput dataInput, StringBuffer object) throws IOException { if (object == null) return new StringBuffer(dataInput.readUTF()); object.setLength(0); return object.append(dataInput.readUTF()); } /** * Writes the specified strong buffer to the specified data output. * * <p>This implementation uses the <code>writeUTF</code> method of the * specified data output in order to write the string representation of the * specified object.</p> * * @param dataOutput the stream to write the string representation of the * specified string buffer to. * @param object the string buffer that string representation should be * written to the data output. * @throws IOException includes any I/O exceptions that may occur. */ @Override public void write(DataOutput dataOutput, StringBuffer object) throws IOException { dataOutput.writeUTF(object.toString()); } }