All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sleepycat.bind.tuple.TupleBase Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */

package com.sleepycat.bind.tuple;

import com.sleepycat.je.DatabaseEntry;

/**
 * A base class for tuple bindings and tuple key creators that provides control
 * over the allocation of the output buffer.
 *
 * 

Tuple bindings and key creators append data to a {@link TupleOutput} * instance, which is also a {@link com.sleepycat.util.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 * #setTupleBufferSize} method may be used to control the initial size of the * buffer, and the {@link #getTupleOutput} method may be overridden by * subclasses to take over creation of the TupleOutput object.

*/ public class TupleBase { private int outputBufferSize; /** * Initializes the initial output buffer size to zero. * *

Unless {@link #setTupleBufferSize} is called, the default {@link * com.sleepycat.util.FastOutputStream#DEFAULT_INIT_SIZE} size will be * used.

*/ public TupleBase() { outputBufferSize = 0; } /** * Sets the initial byte size of the output buffer that is allocated by the * default implementation of {@link #getTupleOutput}. * *

If this property is zero (the default), the default {@link * com.sleepycat.util.FastOutputStream#DEFAULT_INIT_SIZE} size is used.

* * @param byteSize the initial byte size of the output buffer, or zero to * use the default size. */ public void setTupleBufferSize(int byteSize) { outputBufferSize = byteSize; } /** * Returns the initial byte size of the output buffer. * * @return the initial byte size of the output buffer. * * @see #setTupleBufferSize */ public int getTupleBufferSize() { return outputBufferSize; } /** * Returns an empty TupleOutput instance that will be used by the tuple * binding or key creator. * *

The default implementation of this method creates a new TupleOutput * with an initial buffer size that can be changed using the {@link * #setTupleBufferSize} method.

* *

This method may be overridden to return a TupleOutput instance. For * example, an instance per thread could be created and returned by this * method. If a TupleOutput instance is reused, be sure to call its * {@link com.sleepycat.util.FastOutputStream#reset} method before each * use.

* * @param object is the object to be written to the tuple output, and may * be used by subclasses to determine the size of the output buffer. * * @return an empty TupleOutput instance. * * @see #setTupleBufferSize */ protected TupleOutput getTupleOutput(E object) { int byteSize = getTupleBufferSize(); if (byteSize != 0) { return new TupleOutput(new byte[byteSize]); } else { return new TupleOutput(); } } /** * Utility method to set the data in a entry buffer to the data in a tuple * output object. * * @param output is the source tuple output object. * * @param entry is the destination entry buffer. */ public static void outputToEntry(TupleOutput output, DatabaseEntry entry) { entry.setData(output.getBufferBytes(), output.getBufferOffset(), output.getBufferLength()); } /** * Utility method to set the data in a entry buffer to the data in a tuple * input object. * * @param input is the source tuple input object. * * @param entry is the destination entry buffer. */ public static void inputToEntry(TupleInput input, DatabaseEntry entry) { entry.setData(input.getBufferBytes(), input.getBufferOffset(), input.getBufferLength()); } /** * Utility method to create a new tuple input object for reading the data * from a given buffer. If an existing input is reused, it is reset before * returning it. * * @param entry is the source entry buffer. * * @return the new tuple input object. */ public static TupleInput entryToInput(DatabaseEntry entry) { return new TupleInput(entry.getData(), entry.getOffset(), entry.getSize()); } /** * Utility method for use by bindings to create a tuple output object. * * @return a new tuple output object. * * @deprecated replaced by {@link #getTupleOutput} */ public static TupleOutput newOutput() { return new TupleOutput(); } /** * Utility method for use by bindings to create a tuple output object * with a specific starting size. * * @param buffer is the byte array to use as the buffer. * * @return a new tuple output object. * * @deprecated replaced by {@link #getTupleOutput} */ public static TupleOutput newOutput(byte[] buffer) { return new TupleOutput(buffer); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy