Десериализовать в Java сериализованный объект php - PullRequest
14 голосов
/ 13 апреля 2009

Кто-нибудь знает, возможно ли, на самом деле, если это было сделано, сериализовать объект в php и десериализовать его в Java (связь java-php). Возможно, понадобится адаптер.

Что ты думаешь?

Спасибо

Ответы [ 15 ]

18 голосов
/ 13 апреля 2009

Существует serialized-php-parser, которая является реализацией Java, которая может анализировать php-сериализованные объекты. В общем, если у вас есть выбор, я бы не рекомендовал сериализовать php в качестве формата обмена, поскольку он не является безопасным для ascii (содержит нулевые байты). Вместо этого используйте формат xml или json. Если вам нужно немного информации о типе, xmlrpc - хороший выбор. Он имеет хорошие реализации как для php, так и для Java.

15 голосов
/ 13 апреля 2009

PHP и Java используют свои собственные (очевидно разные) схемы сериализации. Однако вы можете использовать формат обмена, который может читать и писать.

Два наиболее очевидных примера - это XML и JSON.

Однако есть и другие, такие как буфер протокола Google.

9 голосов
/ 16 января 2013

Еще один Java-проект для работы с форматом сериализации PHP - Pherialize .

Допустим, вы сериализуете массив следующим образом:

array(3) {
  [0]=>
  string(8) "A string"
  [1]=>
  int(12345)
  [2]=>
  bool(true)
}

Затем вы можете десериализовать его в Java с помощью Pherialize следующим образом:

MixedArray list = Pherialize.unserialize(data).toArray();
System.out.println("Item 1: " + list.getString(0));
System.out.println("Item 2: " + list.getInteger(1));
System.out.println("Item 3: " + list.getBoolean(2));
6 голосов
/ 13 апреля 2009

Теоретически, это, безусловно, возможно. В конце концов, это всего лишь байты, и они могут быть проанализированы. Конечно, десериализованный объект будет содержать только данные, а не какой-либо из методов PHP. Если вы хотите этого, вам придется переписать поведение как классы Java, которые напрямую соответствуют классам PHP.

На практике основная проблема заключается в том, что формат сериализации PHP, по-видимому, не указан формально - по крайней мере, нет ссылки на спецификацию в руководстве .

Так что, возможно, вам придется копаться в коде, чтобы понять формат.

В общем, звучит так, что было бы намного проще и стабильнее использовать что-то вроде сериализации XML - я уверен, что на обоих языках есть библиотеки, способствующие этому.

5 голосов
/ 13 апреля 2009

Формат JSON будет хорошим началом. Существуют реализации для Java , PHP и многих других языков.

Хотя изначально основано на буквенной нотации объекта javascript, JSON оказался удобным для облегченной передачи данных между всеми типами систем.

4 голосов
/ 08 апреля 2017

добавить в pom.xml

<dependency>
    <groupId>de.ailis.pherialize</groupId>
    <artifactId>pherialize</artifactId>
    <version>1.2.1</version>
</dependency>

затем в коде используйте

MixedArray list = Pherialize.unserialize(data).toArray(); // data is string `enter code here`
3 голосов
/ 13 апреля 2009

Вы можете как-то использовать для этого функцию PHP var_export () , которая возвращает разбираемое строковое представление объекта, который вы хотите сериализовать.

2 голосов
/ 13 апреля 2009

Я помню фрагмент для Drupal (PHP CMS), где эта функциональность была необходима. Только что нашел его, поэтому взгляните на Сериализованные объекты узла drupal в java (должен работать с любым сериализованным объектом PHP).

Может быть, вы можете использовать это. Я не знаю, есть ли проблемы с более новыми версиями PHP.

1 голос
/ 16 июня 2016

Лучше выбрать синтаксический анализ строки php в JSONArray, этот репозиторий (https://github.com/superalsrk/PhpSerialization) может помочь вам

0 голосов
/ 20 марта 2013

Как и в предыдущих ответах, я бы по возможности избегал сериализации объектов PHP. Используйте JSON (который на самом деле быстрее, чем serialize () в PHP), Thrift или какой-то другой формат, более универсальный.

Если у вас нет выбора, я работал над модулем Джексона , чтобы разрешить чтение и запись сериализованного PHP из Java. Джексон - отличный анализатор JSON, и, поскольку формат сериализации в PHP очень похож, он кажется вполне подходящим. Это еще не совсем завершено (написание все еще в стадии разработки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...