Создание данных Java DataInputStream в Python

1

У меня есть 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, поэтому я должен найти способ создания файлов, которые можно прочитать из приложения Java с помощью Python.

Есть ли простой способ сделать это?

В крайнем случае я мог:

  • Измените приложение Java и используйте XML. Это нарушит совместимость со всеми существующими данными, поэтому я действительно не хочу этого делать.
  • Использовать Jython. Возможное решение, но я хочу чистый C-Python.
  • Обратный инженер - формат данных. Не очень хорошее решение.
Теги:

1 ответ

4
Лучший ответ

Для строки, которая должна быть readUTF-способна, она должна содержать два байта счетчика, а затем столько же байтов кодированных данных UTF-8, что и счетчик.

Поэтому я предлагаю, чтобы этот фрагмент кода записывал строку unicode data способ, которым мог читать readUTF():

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. Однако я не пытался запустить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню