在Python中创建Java DataInputStream数据

1 投票
1 回答
936 浏览
提问于 2025-04-16 10:33

我有一个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的描述来的。不过我没有尝试运行这段代码。

撰写回答