java - 在 Python 中创建 Java DataInputStream 数据

标签 java python

我有一个 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/

相关文章:

java - 在 Ubuntu 上安装 Eclipse/Java

python - 在没有 jupyter 自动启动的情况下使用 docker image

python - 引用现有的 S3 存储桶以使用 Boto 保存文件

python - 合并组内连续的记录

python - 根据python中的一个值生成类似 'normal-distribution'的数据

python - Urllib Python 没有提供我在检查元素中看到的 html 代码

java - @Async 不适用于任务 :executor

java - 为什么这段代码不读取我的文件?

java - 如何验证字符串数组是否按字母顺序排序或不使用 java?

java - 数组变量可能未初始化错误