如何在Java中读取使用Python的struct.pack方法写的字符串
我在Python中用`struct.pack`把一些信息写入了一个文件,比如:
out.write( struct.pack(">f", 1.1) );
out.write( struct.pack(">i", 12) );
out.write( struct.pack(">3s", "abc") );
然后我在Java中用`DataInputStream`来读取这个文件,使用了`readInt`、`readFloat`和`readUTF`这些方法。读取数字的时候没问题,但一调用`readUTF()`就出现了`EOFException`的错误。
我猜这可能是因为写入字符串的格式和Java读取它的方式不一样,或者我是不是做错了什么?
如果它们不兼容,有没有其他方法可以读取和写入字符串呢?
1 个回答
4
readUTF()
这个函数所期待的格式,可以在这里找到详细说明。简单来说,它需要一个16位的、采用大端字节序的长度值,后面跟着字符串的字节内容。所以,我觉得你可以把你的打包调用改成下面这样的形式:
s = "abc"
out.write( struct.pack(">H", len(s) ))
out.write( struct.pack(">%ds" % len(s), s ))
我的Python有点生疏,但我觉得这个改动差不多。它还假设短整型(>H
)是16位的。