Кто-нибудь знает, возможно ли, на самом деле, если это было сделано, сериализовать объект в php и неэриализовать его в Java (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.
Еще один проект 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 формально не определен - по крайней мере, нет ссылки на спецификацию в руководство.
Поэтому вам, возможно, придется прорыть код, чтобы понять формат.
В целом, похоже, было бы намного проще и стабильнее использовать что-то вроде 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`
Вы можете каким-то образом использовать PHP var_export() для этой функции, которая возвращает синтаксическое строковое представление объекта, который вы хотите сериализовать.
Я помню фрагмент для Drupal (PHP CMS), где эта функция была необходима. Просто найдите его, поэтому взгляните на Serialized drupal node объекты на java (должен работать с любым сериализованным объектом PHP).
Может быть, вы можете это использовать. Я не знаю, есть ли проблемы с более новыми версиями PHP.
Обратите внимание, что существует Java-реализация PHP. Таким образом, вы можете сериализовать объект и передать его на свой Java-PHP-экземпляр, десериализовать, а затем вызвать в свою инфраструктуру Java.
Все это звучит немного нечестивым беспорядком, но, возможно, стоит посмотреть!
Попробуйте xstream (преобразует объекты Java в читаемый XML), чтобы сериализовать, а затем написать собственный PHP-код для десериализации.
Используйте веб-службы (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 Module, чтобы включить чтение и запись сериализованного PHP с Java. Джексон - отличный синтаксический анализатор JSON, и поскольку формат сериализации PHP очень похож, он казался хорошим. Это еще не совсем завершено (письмо все еще продолжается).
Лучше выбрать синтаксический анализ сериализованной строки PHP в JSONArray, это репо (https://github.com/superalsrk/PhpSerialization) может помочь вам