Кто-нибудь знает, возможно ли, на самом деле, если это было сделано, сериализовать объект в 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 ) может помочь вам