Skip to content

Commit 17e3b46

Browse files
authored
Merge pull request #11 from vmarkovtsev/master
Dramatically speedup reading byte arrays
2 parents 54a01de + 9d52478 commit 17e3b46

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

javaobj.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,17 @@ def __init__(self, classdesc=None):
339339
JavaObject.__init__(self)
340340
self.classdesc = classdesc
341341

342+
343+
class JavaByteArray(bytearray, JavaObject):
344+
"""
345+
Represents the special case of Java Array which contains bytes
346+
"""
347+
348+
def __init__(self, data, classdesc=None):
349+
bytearray.__init__(self, data)
350+
JavaObject.__init__(self)
351+
self.classdesc = classdesc
352+
342353
# ------------------------------------------------------------------------------
343354

344355

@@ -903,6 +914,8 @@ def do_array(self, parent=None, ident=0):
903914
_, res = self._read_and_exec_opcode(ident=ident + 1)
904915
log_debug("Object value: {0}".format(res), ident)
905916
array.append(res)
917+
elif type_char == self.TYPE_BYTE:
918+
array = JavaByteArray(self.object_stream.read(size), classdesc)
906919
else:
907920
for _ in range(size):
908921
res = self._read_value(type_char, ident)
@@ -1465,7 +1478,8 @@ def _write_value(self, field_type, value):
14651478
self.write_null()
14661479
elif isinstance(value, JavaEnum):
14671480
self.write_enum(value)
1468-
elif isinstance(value, JavaArray):
1481+
elif isinstance(value, JavaArray) \
1482+
or isinstance(value, JavaByteArray):
14691483
self.write_array(value)
14701484
elif isinstance(value, JavaObject):
14711485
self.write_object(value)

tests/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def test_class_with_byte_array_rw(self):
148148
jobj = self.read_file("testClassWithByteArray.ser")
149149
pobj = javaobj.loads(jobj)
150150

151-
self.assertEqual(pobj.myArray, [1,3,7,11])
151+
self.assertEqual(pobj.myArray, b"\x01\x03\x07\x0b")
152152
self._try_marshalling(jobj, pobj)
153153

154154
def test_boolean(self):

0 commit comments

Comments
 (0)