code: protected ByteBuffer __vector_as_bytebuffer(int vector_offset, int elem_size) {
      int o = __offset(vector_offset);
      if (o == 0) return null;
      ByteBuffer bb = this.bb.duplicate().order(ByteOrder.LITTLE_ENDIAN);
      int vectorstart = __vector(o);
      bb.position(vectorstart);
      bb.limit(vectorstart + __vector_len(o) * elem_size);
      return bb;
    }
docs: Get a whole vector as a ByteBuffer.
  
  This is efficient, since it only allocates a new {@link ByteBuffer} object,
  but does not actually copy the data, it still refers to the same bytes
  as the original ByteBuffer. Also useful with nested FlatBuffers, etc.
  
  @param vector_offset The position of the vector in the byte buffer
  @param elem_size The size of each element in the array
  @return The {@link ByteBuffer} for the array