summaryrefslogtreecommitdiff
path: root/lang/java/src/com/sleepycat/db/DatabaseStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'lang/java/src/com/sleepycat/db/DatabaseStream.java')
-rw-r--r--lang/java/src/com/sleepycat/db/DatabaseStream.java159
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));
+ }
+
+}