有没有人知道在 PHP 中序列化一个对象并在 Java 中反序列化(即实现 Java-PHP 通信)是否可行,是否已经实现过了?也许需要一个适配器。
你认为呢?
谢谢。
有没有人知道在 PHP 中序列化一个对象并在 Java 中反序列化(即实现 Java-PHP 通信)是否可行,是否已经实现过了?也许需要一个适配器。
你认为呢?
谢谢。
有一个名为serialized-php-parser
的工具,它是一种Java实现,可以解析php序列化对象。总的来说,如果有选择的话,我不推荐使用php序列化作为交换格式,因为它不是ascii安全的(它包含空字节)。相反,建议使用像xml或json这样的格式。如果需要一些类型信息,xmlrpc 是一个不错的选择,它在php和Java两种语言中都有良好的实现。
PHP和Java都使用它们自己的(显然不同的)序列化方案。但你可以使用一种可读写的交换格式。
最明显的两个例子是XML和JSON。
还有其他的格式,比如Google Protocol Buffers。
array(3) {
[0]=>
string(8) "A string"
[1]=>
int(12345)
[2]=>
bool(true)
}
然后你可以使用 Pherialize 在 Java 中对其进行反序列化,方法如下:
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));
添加到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`
我记得在Drupal(PHP CMS)中需要这种功能的代码片段。我找到了它,你可以看一下Serialized drupal node objects to java(应该适用于任何PHP序列化对象)。
也许你可以使用它。我不知道新版本的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对象序列化。使用JSON(实际上比PHP中的serialize()更快)、thrift或其他更普遍的格式。
如果没有选择,我一直在开发一个Jackson Module,以便从Java读取和写入序列化的PHP。Jackson是一个很棒的JSON解析器,由于PHP序列化格式非常相似,因此它似乎很合适。它还不完整(编写仍在进行中)。