我有一个 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。
- 对数据格式进行逆向工程。也不是一个好的解决方案。
最佳答案
对于一个可读 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 接口(interface) DataInput
的描述。不过,我没有尝试运行它。
关于java - 在 Python 中创建 Java DataInputStream 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788052/