Декодирование Java-объектов в Python - PullRequest
1 голос
/ 22 ноября 2011

Возможно ли декодировать Java-объекты в Python?Я знаю структуру Java-класса, который возвращает данные.Данные возвращаются с заголовком «Transfer-Encoding: chunked»

. Или мне нужно получить возвращаемые данные, отправленные как xml / json?

Это пример ответа Iполучить;(Обратите внимание, что некоторые управляющие символы удаляются вставкой)

 -- response --
200 OK
Server:  Apache-Coyote/1.1
Transfer-Encoding:  chunked
Date:  Tue, 22 Nov 2011 13:24:41 GMT
��srjava.util.ArrayListx����a�IsizexpGwXsr,com.blah.blah.data.ClientInfos����8d�LdbNametLjava/lang/String;Ldescriptionq~xptdbname1t Customername1q~tdbname2tCustomername2sq~t

В этом примере возвращаются два клиента в формате client, имя базы данных

dbname1, customername1

dbname2,customername2

1 Ответ

0 голосов
/ 22 ноября 2011

--- Отредактировано по мере появления дополнительных подробностей ---

Содержимое этого HTTP-ответа представляет собой сериализованный объект Java.

Сериализация Java - это процесс, с помощью которого объект в памяти упаковывается в удобные для транспорта байты с целью чтения другой JVM.Короче, нужно прочитать формат сериализации.Предполагая, что они не добавили пользовательский сериализатор, фактический протокол задокументирован здесь .

Остальное просто гарантирует, что вы выполняете разумное сопоставление полей данных с Java на Python.Если вы хотите поддерживать обработку данных «в оба конца», вам следует кэшировать иногда отбрасываемую «информацию java» в специальных «областях» вашей структуры данных, чтобы вы могли сериализоваться обратно к тем же конструкциям java.

-- За оригинальной публикацией следует ---

Либо вы разбираете класс (что легко сделать, поскольку в Java очень жесткая структура классов и легко преобразовать байт-код в сопоставление исходного кода), либо вы обрабатываете данные.

Если вы обрабатываете данные, вы на самом деле не декодируете Java, и легкость выполнения того, что вы хотите, в значительной степени зависит от способности собирать знания о том, как кодируются данные.Поскольку вы упомянули заголовок «Transfer-Encoding: Chunked», я предполагаю, что вы читаете HTTP-ответ (в комплекте с заголовками).

Почти каждый язык имеет библиотеку для обработки HTTP-ответов из-за популярности ИнтернетаСервисы. У Python уже есть HTTP-клиент, как указано здесь .

...