// Copyright (c) 2014, Facebook, Inc. All rights reserved. // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. An additional grant // of patent rights can be found in the PATENTS file in the same directory. package org.rocksdb; /** *
Base class for slices which will receive * byte[] based access to the underlying data.
* *byte[] backed slices typically perform better with * small keys and values. When using larger keys and * values consider using {@link org.rocksdb.DirectSlice}
*/ public class Slice extends AbstractSliceCalled from JNI to construct a new Java Slice * without an underlying C++ object set * at creation time.
* *Note: You should be aware that * {@see org.rocksdb.RocksObject#disOwnNativeHandle()} is intentionally * called from the default Slice constructor, and that it is marked as * private. This is so that developers cannot construct their own default * Slice objects (at present). As developers cannot construct their own * Slice objects through this, they are not creating underlying C++ Slice * objects, and so there is nothing to free (dispose) from Java.
*/ private Slice() { super(); disOwnNativeHandle(); } /** *Constructs a slice where the data is taken from * a String.
* * @param str String value. */ public Slice(final String str) { super(); createNewSliceFromString(str); } /** *Constructs a slice where the data is a copy of * the byte array from a specific offset.
* * @param data byte array. * @param offset offset within the byte array. */ public Slice(final byte[] data, final int offset) { super(); createNewSlice0(data, offset); } /** *Constructs a slice where the data is a copy of * the byte array.
* * @param data byte array. */ public Slice(final byte[] data) { super(); createNewSlice1(data); } /** *Deletes underlying C++ slice pointer * and any buffered data.
* ** Note that this function should be called only after all * RocksDB instances referencing the slice are closed. * Otherwise an undefined behavior will occur.
*/ @Override protected void disposeInternal() { super.disposeInternal(); disposeInternalBuf(nativeHandle_); } @Override protected final native byte[] data0(long handle); private native void createNewSlice0(byte[] data, int length); private native void createNewSlice1(byte[] data); private native void disposeInternalBuf(long handle); }