在Python中创建Java DataInputStream数据
我有一个Java程序,它使用DataInputStream
来存储对象数据。
举个例子:
DataInputStream tInput = new DataInputStream(getClass().getResourceAsStream(aDirectory + "/ResultItemInfo.dat"));
this._text = tInput.readUTF();
this._image = tInput.readUTF();
this._audio = tInput.readUTF();
this._random = false;
if (tInput.read() == 1) {
this._random = true;
}
this._hasMenu = false;
if (tInput.read() == 1) {
this._hasMenu = true;
}
不错吧?
现在我有一个现成的数据集,但我需要添加一些记录。如果我需要制作的工具也是用Java写的,那就简单多了。不幸的是,它是用Python写的,所以我得想办法用Python创建可以被Java应用读取的文件。
有没有简单的方法可以做到这一点呢?
作为最后的办法,我可以:
- 修改Java应用,使用XML格式。这会导致与现有数据不兼容,所以我真的不想这么做。
- 使用Jython。这是一个可能的解决方案,但我想要纯粹的C-Python。
- 逆向工程数据格式。这也不是个好办法。
1 个回答
4
要让一个字符串可以被读成UTF格式,它必须先有两个字节的计数器,然后再跟上和计数器所说的字节数一样多的UTF-8编码的数据。
所以我建议这段代码应该以readUTF()
可以读取的方式来写一个Unicode字符串data
:
encoded = data.encode('UTF-8')
count = len(encoded)
msb, lsb = divmod(count, 256) # split to two bytes
outfile.write(chr(msb))
outfile.write(chr(lsb))
outfile.write(encoded)
这里的outfile
必须以二进制模式打开(比如用"wb
")。这是根据Java接口DataInput
的描述来的。不过我没有尝试运行这段代码。