diff options
Diffstat (limited to 'lang/java/src/com/sleepycat/db/DatabaseStream.java')
-rw-r--r-- | lang/java/src/com/sleepycat/db/DatabaseStream.java | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/lang/java/src/com/sleepycat/db/DatabaseStream.java b/lang/java/src/com/sleepycat/db/DatabaseStream.java new file mode 100644 index 00000000..add27405 --- /dev/null +++ b/lang/java/src/com/sleepycat/db/DatabaseStream.java @@ -0,0 +1,159 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. + * + * $Id$ + */ + +package com.sleepycat.db; + +import com.sleepycat.db.internal.DbConstants; +import com.sleepycat.db.internal.DbStream; + +/** +A database stream. The database stream is used to access the blob. +<p> +Once the database stream close method has been called, the handle may not +be accessed again. +<p> +To obtain a database stream with default attributes: +<blockquote><pre> + DatabaseStream dbs = myCursor.openDatabaseStream(null); +</pre></blockquote> +To customize the attributes of a database stream, +use a DatabaseStreamConfig object. +<blockquote><pre> + DatabaseStreamConfig config = new DatabaseStreamConfig(); + config.setReadOnly(true); + DatabaseStream dbs = myCursor.openDatabaseStream(config); +</pre></blockquote> +*/ +public class DatabaseStream { + /* package */ DbStream dbs; + /* package */ Cursor cursor; + /* package */ DatabaseStreamConfig config; + + protected DatabaseStream( + final Cursor cursor, final DatabaseStreamConfig config) { + this.cursor = cursor; + this.config = config; + } + + DatabaseStream(final Cursor cursor, + final DbStream dbs, final DatabaseStreamConfig config) + throws DatabaseException { + + this.cursor = cursor; + this.dbs = dbs; + this.config = config; + } + + /** + Discard the database stream. + <p> + After the close method has been called, you cannot use the database stream + handle again. + <p> + It is recommended to always close all database stream handles immediately + after their use to release resources. + <p> + @throws DatabaseException if a failure occurs. + */ + public synchronized void close() + throws DatabaseException { + + if (dbs != null) { + try { + dbs.close(0); + } finally { + dbs = null; + } + } + } + + /** + Return this database stream configuration. + <p> + @return + This database stream configuration. + <p> + @throws DatabaseException if a failure occurs. + */ + public DatabaseStreamConfig getConfig() { + return config; + } + + /** + Return the {@link com.sleepycat.db.Cursor Cursor} handle associated + with this database stream. + <p> + @return + The cursor handle associated with this database stream. + */ + public Cursor getCursor() { + return cursor; + } + + /** + Read from the blob accessed by this database stream. + <p> + @throws IllegalArgumentException if a failure occurs. + <p> + @param data the data read from the blob + returned as output. Its byte array does not need to be initialized by the + caller. + <p> + @param offset the position in bytes in the blob where the reading starts. + <p> + @param size the number of bytes to read. + <p> + @return {@link com.sleepycat.db.OperationStatus#SUCCESS OperationStatus.SUCCESS} + if the operation succeeds. + <p> + @throws IllegalArgumentException if the operation fails. + <p> + @throws DatabaseException if a failure occurs. + */ + public OperationStatus read(final DatabaseEntry data, long offset, int size) + throws DatabaseException, IllegalArgumentException { + + return OperationStatus.fromInt( + dbs.read(data, offset, size, 0)); + } + + /** + Return the size in bytes of the blob accessed by the database stream. + <p> + @return + The size in bytes of the blob accessed by the database stream. + <p> + @throws DatabaseException if a failure occurs. + */ + public long size() + throws DatabaseException { + return dbs.size(0); + } + + /** + Write to the blob accessed by the database stream. + <p> + @param data the data {@link com.sleepycat.db.DatabaseEntry DatabaseEntry} + to write into the blob. + <p> + @param offset the position in bytes in the blob where the writing starts. + <p> + @return {@link com.sleepycat.db.OperationStatus#SUCCESS OperationStatus.SUCCESS} + if the operation succeeds. + <p> + @throws IllegalArgumentException if the operation fails. + <p> + @throws DatabaseException if a failure occurs. + */ + public OperationStatus write(final DatabaseEntry data, long offset) + throws DatabaseException, IllegalArgumentException { + + return OperationStatus.fromInt(dbs.write(data, offset, 0)); + } + +} |