int keylength = bb.getInt();
int valuelength = bb.getInt();
byte[] key = new byte[keylength];
- byte[] value = new byte[valuelength];
bb.get(key);
- bb.get(value);
- return new KeyValue(IoTString.shallow(key), IoTString.shallow(value));
+
+ if (valuelength != 0) {
+ byte[] value = new byte[valuelength];
+ bb.get(value);
+ return new KeyValue(IoTString.shallow(key), IoTString.shallow(value));
+ }
+
+ return new KeyValue(IoTString.shallow(key), null);
}
public void encode(ByteBuffer bb) {
bb.putInt(key.length());
- bb.putInt(value.length());
+
+ if (value != null) {
+ bb.putInt(value.length());
+ } else {
+ bb.putInt(0);
+ }
+
bb.put(key.internalBytes());
- bb.put(value.internalBytes());
+
+ if (value != null) {
+ bb.put(value.internalBytes());
+ }
}
public int getSize() {
- return 2 * Integer.BYTES + key.length() + value.length();
+ if (value != null) {
+ return 2 * Integer.BYTES + key.length() + value.length();
+ }
+
+ return 2 * Integer.BYTES + key.length();
}
public String toString() {
+ if (value == null) {
+ return "null";
+ }
return value.toString();
}