For Java it is trivial:
DataOutputStream daos = new DataOutputStream(baos); daos.writeLong(value1); daos.writeInt(value2); daos.writeBoolean(value3); daos.writeUTF(value4);
In Python there is no such thing, but there is nice utility package called struct. It basically allows to read and write binary data and convert it into normal data. It is configurable and with small experimenting it is possible to find matching reading and writing functions for Java counterparts.
For example to parse example that is written above:
result = struct.unpack('>II', input1) value1 = (result << 32) + result result = struct.unpack('>i', input2) // result becomes value2 result = struct.unpack('>b', input3) // result is 1 for true and 0 for false
With strings it is a little bit trickier, because with method writeUTF, Java writes string length as 2 byte number and UTF-8 string. So in Python it is:
result = struct.unpack('>H', input4) result = input5 // it is already acceptable for Python, just calculate result bytes from input
Similar is also writing from Python to Java; same data formats are good for Java reading.
There is nice trick in Python, it allows to unpack and pack a lot of parameters simultaneously, for example this example above can be shortened to:
result = struct.unpack('>IIibH', input6) // result array now contains all unpacked values except string