Cómo leer la cadena en java que se escribió usando el método struct.pack de python

He escrito información en un archivo en python usando struct.pack, por ejemplo.

out.write( struct.pack(">f", 1.1) ); out.write( struct.pack(">i", 12) ); out.write( struct.pack(">3s", "abc") ); 

Luego lo leí en java usando DataInputStream y readInt , readFloat y readUTF . La lectura de los números funciona, pero tan pronto como llamo a readUTF() obtengo la EOFException .

Supongo que esto se debe a las diferencias en el formato de la cadena que se está escribiendo y la forma en que Java la lee, ¿o estoy haciendo algo mal?

Si son incompatibles, ¿hay otra forma de leer y escribir cadenas?

El formato esperado por readUTF() , se documenta aquí . En resumen, se espera una longitud big-endian de 16 bits seguida por los bytes de la cadena. Entonces, creo que podrías modificar tu paquete de llamadas para que se vea algo así:

 s = "abc" out.write( struct.pack(">H", len(s) )) out.write( struct.pack(">%ds" % len(s), s )) 

Mi Python está un poco oxidado, pero creo que eso está cerca. También asume que un corto (el >H ) es de 16 bits.