code: def do_array(self, parent=None, ident=0):
          
          # TC_ARRAY classDesc newHandle (int)<size> values[size]
          log_debug("[array]", ident)
          _, classdesc = self._read_and_exec_opcode(
              ident=ident + 1,
              expect=(
                  self.TC_CLASSDESC,
                  self.TC_PROXYCLASSDESC,
                  self.TC_NULL,
                  self.TC_REFERENCE,
              ),
          )
  
          array = JavaArray(classdesc)
  
          self._add_reference(array, ident)
  
          (size,) = self._readStruct(">i")
          log_debug("size: {0}".format(size), ident)
  
          type_char = classdesc.name[0]
          assert type_char == self.TYPE_ARRAY
          type_char = classdesc.name[1]
  
          if type_char == self.TYPE_OBJECT or type_char == self.TYPE_ARRAY:
              for _ in range(size):
                  _, res = self._read_and_exec_opcode(ident=ident + 1)
                  log_debug("Object value: {0}".format(res), ident)
                  array.append(res)
          elif type_char == self.TYPE_BYTE:
              array = JavaByteArray(self.object_stream.read(size), classdesc)
          elif self.use_numpy_arrays:
              import numpy
  
              array = numpy.fromfile(
                  self.object_stream,
                  dtype=JavaObjectConstants.NUMPY_TYPE_MAP[type_char],
                  count=size,
              )
          else:
              for _ in range(size):
                  res = self._read_value(type_char, ident)
                  log_debug("Native value: {0}".format(repr(res)), ident)
                  array.append(res)
  
          return array
docs: Handles a TC_ARRAY opcode
  
          :param parent:
          :param ident: Log indentation level
          :return: A list of deserialized objects