Registry / serialization / javaobj-py3

javaobj-py3

JSON →
library0.4.4pypypi✓ verified 35d ago

javaobj-py3 is a Python library designed for serializing and de-serializing Java objects, facilitating interoperability between Python and Java applications. It is currently at version 0.4.4 and receives irregular but active updates, with the latest significant features and fixes released recently.

serialization
Install & Compatibility
Where this runs
tested against v0.5.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.920 runs
installs and imports cleanly · install 0.0s · import 0.042s · 18.4MB
glibc
py 3.103.920 runs
installs and imports cleanly · install 1.6s · import 0.036s · 19MB
16MB installed
● package 16MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

from javaobj import loads

Only available with the default 'v1' parser; the 'v2' parser does not support serialization.

from javaobj import dumps

Represents a deserialized custom Java object or can be used to construct objects for serialization.

from javaobj import JavaObject

The more robust 'v2' deserializer, recommended for complex Java streams, but it cannot serialize.

from javaobj.v2 import loads as v2_loads

This quickstart demonstrates how to deserialize common Java types (String, List) into their Python equivalents using `javaobj.loads()`. It also shows a basic example of serializing a Python string to Java format using `javaobj.dumps()` and introduces the `v2_loads` parser for advanced deserialization.

import javaobj # 1. Deserializing a simple Java String # Bytes represent a serialized Java String "Hello, World!" java_serialized_string = b'\xac\xed\x00\x05t\x00\x0cHello, World!' python_string = javaobj.loads(java_serialized_string) print(f"Deserialized Java String: '{python_string}' (Python type: {type(python_string)})") # 2. Deserializing a Java object that maps to a Python list # Bytes for a serialized Java ArrayList containing "One" and "Two" java_list_bytes = b'\xac\xed\x00\x05sr\x00\x13java.util.ArrayListx\x81\xd2\x1d\x99\xc7\xed\x11\x00\x02\x00\x00xp\x00\x00\x00\x02w\x04\x00\x00\x00\x02t\x00\x03Onet\x00\x03Twoe\x00' python_list = javaobj.loads(java_list_bytes) print(f"Deserialized Java List: {python_list} (Python type: {type(python_list)})") # 3. Basic Serialization (available via the default v1 implementation) # Serializing a Python string back into Java format serialized_bytes = javaobj.dumps("Python data") print(f"Serialized 'Python data' (first 20 bytes): {serialized_bytes[:20]}...") # 4. Deserializing using the v2 parser for potentially better compatibility # (Note: For this simple string, output will be identical) from javaobj.v2 import loads as v2_loads python_string_v2 = v2_loads(java_serialized_string) print(f"Deserialized (v2) Java String: '{python_string_v2}' (Python type: {type(python_string_v2)})")
Debug
Known footguns
breakingVersion 0.4.0 introduced a new 'v2' parser (`javaobj.v2`) which is more capable for deserialization but *does not support serialization* (`dumps`). The default `javaobj.loads` and `javaobj.dumps` still use the older 'v1' parser. Using `v2` for deserialization means you cannot serialize with it.
gotchaNumPy is an optional dependency. If you intend to deserialize Java numeric arrays into NumPy arrays, ensure 'numpy' is installed (`pip install numpy`). The library loads NumPy lazily, only when `use_numpy_arrays` is explicitly requested during unmarshalling (e.g., `javaobj.loads(bytes_data, use_numpy_arrays=True)`).
gotchaThe `javaobj.load()` function (for file-like objects) can transparently handle GZipped Java serialization streams. However, `javaobj.loads()` (for bytes in memory) expects raw bytes and will not automatically decompress GZipped input.
gotchaPrimitive Java types (e.g., `java.lang.String`, `java.lang.Integer`, `java.lang.Boolean`) are deserialized into their equivalent native Python types (`str`, `int`, `bool`). Custom Java classes or complex collections (like `ArrayList`, `HashMap`) are typically mapped to `javaobj.JavaObject` instances, requiring attribute access (e.g., `obj.fieldName`).
gotchaWhile the library supports decoding CESU-8 strings (common in older Java serialization), character encoding issues can still arise with non-standard or malformed input. Ensure the Java side uses standard UTF-8 or be prepared to handle specific encoding issues.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
10 hits · last 30 days
gptbot
4
ahrefsbot
4
script
1
googlebot
1
Resources