def do_array(self, parent=None, ident=0):
        """
        Handles a TC_ARRAY opcode

        :param parent:
        :param ident: Log indentation level
        :return: A list of deserialized objects
        """
        # 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
def do_array ( self , parent = None , ident = 0 ) : 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
Handles a TC_ARRAY opcode

        :param parent:
        :param ident: Log indentation level
        :return: A list of deserialized objects