Adds __reset method to Struct and Table (#4966)
authorJason Neufeld <jneufeld@google.com>
Wed, 3 Oct 2018 19:09:30 +0000 (12:09 -0700)
committerWouter van Oortmerssen <aardappel@gmail.com>
Wed, 3 Oct 2018 19:09:30 +0000 (12:09 -0700)
This allow recycling/pooling instances without leaking ByteBuffers, by
providing a mechanism to reset instance to newly constructed state.

java/com/google/flatbuffers/Struct.java
java/com/google/flatbuffers/Table.java

index ae31553..39a8215 100644 (file)
@@ -28,6 +28,20 @@ public class Struct {
   protected int bb_pos;
   /** The underlying ByteBuffer to hold the data of the Struct. */
   protected ByteBuffer bb;
+
+  /**
+   * Resets internal state with a null {@code ByteBuffer} and a zero position.
+   *
+   * This method exists primarily to allow recycling Struct instances without risking memory leaks
+   * due to {@code ByteBuffer} references. The instance will be unusable until it is assigned
+   * again to a {@code ByteBuffer}.
+   *
+   * @param struct the instance to reset to initial state
+   */
+  public void __reset() {
+    bb = null;
+    bb_pos = 0;
+  }
 }
 
 /// @endcond
index cbbeda1..489893b 100644 (file)
@@ -292,6 +292,18 @@ public class Table {
     }
     return len_1 - len_2;
   }
+
+  /**
+   * Resets the internal state with a null {@code ByteBuffer} and a zero position.
+   *
+   * This method exists primarily to allow recycling Table instances without risking memory leaks
+   * due to {@code ByteBuffer} references. The instance will be unusable until it is assigned
+   * again to a {@code ByteBuffer}.
+   */
+  public void __reset() {
+    bb = null;
+    bb_pos = 0;
+  }
 }
 
 /// @endcond