Unserialize в Java – сериализованный php-объект

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

Как вы думаете?

благодаря

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

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

Двумя наиболее очевидными примерами являются XML и JSON.

Существуют и другие, такие как Google Protocol Buffers.

Другим проектом 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)); 

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

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

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

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

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

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

добавить в 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` 

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

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

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

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

Все это звучит немного нечестивым беспорядком, но, возможно, стоит посмотреть!

Используйте веб-службы (REST, RPC, SOAP) или любое другое решение, сохраняющее простой текст, который позволит вам читать / перестраивать данные с Java.

Сериализация объекта в PHP приведет к удалению свойств объекта. Полученная строка не является ужасно сложной.

 echo serialize( array(1, null, "mystring", array("key"=>"value")) ); 

Результаты в:

 a:4:{i:0;i:1;i:1;N;i:2;s:8:"mystring";i:3;a:1:{s:3:"key";s:5:"value";}} 

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

Вы также можете быть заинтересованы в использовании моста PHP / Java ( http://php-java-bridge.sourceforge.net/ ). Он имеет собственный протокол. На их сайте говорится, что это быстрая реализация моста.

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

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

Попробуйте xstream (преобразует объекты Java в читаемый XML) для сериализации, а затем создайте собственный PHP-код для десериализации.

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