@@ -311,6 +311,19 @@ def copy(self, new_object):
311311 new_object .__setattr__ (name , getattr (self , name ))
312312
313313
314+ class JavaString (str ):
315+ """
316+ Represents a Java String
317+ """
318+ def __init__ (self , * args , ** kwargs ):
319+ str .__init__ (self , * args , ** kwargs )
320+
321+ def __eq__ (self , other ):
322+ if not isinstance (other , str ):
323+ return False
324+ return str .__eq__ (self , other )
325+
326+
314327class JavaEnum (JavaObject ):
315328 """
316329 Represents a Java enumeration
@@ -628,7 +641,7 @@ def do_classdesc(self, parent=None, ident=0):
628641 _ , field_type = self ._read_and_exec_opcode (
629642 ident = ident + 1 ,
630643 expect = (self .TC_STRING , self .TC_REFERENCE ))
631- assert type (field_type ) is str
644+ assert type (field_type ) is JavaString
632645# if field_type is not None:
633646# field_type = "array of " + field_type
634647# else:
@@ -638,7 +651,7 @@ def do_classdesc(self, parent=None, ident=0):
638651 _ , field_type = self ._read_and_exec_opcode (
639652 ident = ident + 1 ,
640653 expect = (self .TC_STRING , self .TC_REFERENCE ))
641- assert type (field_type ) is str
654+ assert type (field_type ) is JavaString
642655
643656 log_debug ("FieldName: 0x{0:X} Name:{1} Type:{2} ID:{3}"
644657 .format (typecode , field_name , field_type , fieldId ),
@@ -824,7 +837,7 @@ def do_string(self, parent=None, ident=0):
824837 :return: A string
825838 """
826839 log_debug ("[string]" , ident )
827- ba = self ._readString ()
840+ ba = JavaString ( self ._readString () )
828841 self ._add_reference (ba , ident )
829842 return ba
830843
@@ -837,7 +850,7 @@ def do_string_long(self, parent=None, ident=0):
837850 :return: A string
838851 """
839852 log_debug ("[long string]" , ident )
840- ba = self ._readString ("Q" )
853+ ba = JavaString ( self ._readString ("Q" ) )
841854 self ._add_reference (ba , ident )
842855 return ba
843856
@@ -1099,6 +1112,9 @@ def writeObject(self, obj):
10991112 elif isinstance (obj , JavaObject ):
11001113 # Deserialized Java object
11011114 self .write_object (obj )
1115+ elif isinstance (obj , JavaString ):
1116+ # Deserialized String
1117+ self .write_string (obj )
11021118 elif isinstance (obj , JavaClass ):
11031119 # Java class
11041120 self .write_class (obj )
@@ -1325,6 +1341,8 @@ def _write_value(self, field_type, value):
13251341 self .write_enum (value )
13261342 elif isinstance (value , JavaObject ):
13271343 self .write_object (value )
1344+ elif isinstance (value , JavaString ):
1345+ self .write_string (value )
13281346 elif isinstance (value , str ):
13291347 self .write_blockdata (value )
13301348 else :
0 commit comments