package com.sleepycat.bind.serial; import com.sleepycat.util.FastOutputStream; import de.ovgu.cide.jakutil.*; /** * A base class for serial bindings creators that provides control over the * allocation of the output buffer. * <p> * Serial bindings append data to a {@link FastOutputStream} instance. This * object has a byte array buffer that is resized when it is full. The * reallocation of this buffer can be a performance factor for some applications * using large objects. To manage this issue, the {@link #setSerialBufferSize}method may be used to control the initial size of the buffer, and the{@link #getSerialOutput} method may be overridden by subclasses to take over * creation of the FastOutputStream object. * </p> */ public class SerialBase { private int outputBufferSize; /** * Initializes the initial output buffer size to zero. * <p> * Unless {@link #setSerialBufferSize} is called, the default {@link FastOutputStream#DEFAULT_INIT_SIZE} size will be used. * </p> */ public SerialBase(){ outputBufferSize=0; } /** * Sets the initial byte size of the output buffer that is allocated by the * default implementation of {@link #getSerialOutput}. * <p> * If this property is zero (the default), the default {@link FastOutputStream#DEFAULT_INIT_SIZE} size is used. * </p> * @param byteSizethe initial byte size of the output buffer, or zero to use the * default size. */ public void setSerialBufferSize( int byteSize){ outputBufferSize=byteSize; } /** * Returns the initial byte size of the output buffer. * @return the initial byte size of the output buffer. * @see #setSerialBufferSize */ public int getSerialBufferSize(){ return outputBufferSize; } /** * Returns an empty SerialOutput instance that will be used by the serial * binding or key creator. * <p> * The default implementation of this method creates a new SerialOutput with * an initial buffer size that can be changed using the {@link #setSerialBufferSize} method. * </p> * <p> * This method may be overridden to return a FastOutputStream instance. For * example, an instance per thread could be created and returned by this * method. If a FastOutputStream instance is reused, be sure to call its{@link FastOutputStream#reset} method before each use. * </p> * @param objectis the object to be written to the serial output, and may be * used by subclasses to determine the size of the output buffer. * @return an empty FastOutputStream instance. * @see #setSerialBufferSize */ protected FastOutputStream getSerialOutput( Object object){ int byteSize=getSerialBufferSize(); if (byteSize != 0) { return new FastOutputStream(byteSize); } else { return new FastOutputStream(); } } }