summaryrefslogtreecommitdiff
path: root/lang/java/src/com/wiredtiger/db/PackInputStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'lang/java/src/com/wiredtiger/db/PackInputStream.java')
-rw-r--r--lang/java/src/com/wiredtiger/db/PackInputStream.java35
1 files changed, 29 insertions, 6 deletions
diff --git a/lang/java/src/com/wiredtiger/db/PackInputStream.java b/lang/java/src/com/wiredtiger/db/PackInputStream.java
index f265d041d94..732bf450acd 100644
--- a/lang/java/src/com/wiredtiger/db/PackInputStream.java
+++ b/lang/java/src/com/wiredtiger/db/PackInputStream.java
@@ -43,6 +43,7 @@ public class PackInputStream {
protected byte[] value;
protected int valueOff;
protected int valueLen;
+ protected boolean isRaw;
/**
* Constructor.
@@ -52,7 +53,7 @@ public class PackInputStream {
* \param value The raw bytes that back the stream.
*/
public PackInputStream(String format, byte[] value) {
- this(format, value, 0, value.length);
+ this(format, value, false, 0, value.length);
}
/**
@@ -61,14 +62,29 @@ public class PackInputStream {
* \param format A String that contains the WiredTiger format that
* defines the layout of this packed value.
* \param value The raw bytes that back the stream.
+ * \param isRaw The stream is opened raw.
+ */
+ public PackInputStream(String format, byte[] value, boolean isRaw) {
+ this(format, value, isRaw, 0, value.length);
+ }
+
+ /**
+ * Constructor.
+ *
+ * \param format A String that contains the WiredTiger format that
+ * defines the layout of this packed value.
+ * \param value The raw bytes that back the stream.
+ * \param isRaw The stream is opened raw.
* \param off Offset into the value array at which the stream begins.
* \param len Length of the value array that forms the stream.
*/
- public PackInputStream(String format, byte[] value, int off, int len) {
- this.format = new PackFormatInputStream(format);
+ public PackInputStream(
+ String format, byte[] value, boolean isRaw, int off, int len) {
+ this.format = new PackFormatInputStream(format, isRaw);
this.value = value;
this.valueOff = off;
this.valueLen = len;
+ this.isRaw = isRaw;
}
/**
@@ -117,7 +133,9 @@ public class PackInputStream {
*/
public void getByteArray(byte[] dest, int off, int len)
throws WiredTigerPackingException {
- format.checkType('U', false);
+ if (!isRaw) {
+ format.checkType('U', false);
+ }
getByteArrayInternal(getByteArrayLength(), dest, off, len);
}
@@ -127,7 +145,9 @@ public class PackInputStream {
*/
public byte[] getByteArray()
throws WiredTigerPackingException {
- format.checkType('U', false);
+ if (!isRaw) {
+ format.checkType('U', false);
+ }
int itemLen = getByteArrayLength();
byte[] unpacked = new byte[itemLen];
getByteArrayInternal(itemLen, unpacked, 0, itemLen);
@@ -142,7 +162,10 @@ public class PackInputStream {
throws WiredTigerPackingException {
int itemLen = 0;
- if (format.hasLength()) {
+ if (isRaw) {
+ // The rest of the buffer is a byte array.
+ itemLen = valueLen - valueOff;
+ } else if (format.hasLength()) {
// If the format has a length, it's always used.
itemLen = format.getLengthFromFormat(true);
} else if (format.getType() == 'U') {