如何在PHP中反序列化用Java序列化的对象

时间:2010-12-06 18:02:57

标签: java php serialization

有没有办法在PHP中反序列化用Java序列化的对象? IE如果我有一个实现序列化的Java类,我使用ObjectOutputStream来编写对象,并将结果转换为字符串,那么PHP中是否有一种方法可以获取该字符串并从中创建类似的对象表示?

  

Java序列化数据是什么样的?

回应:

���sr�com.site.entity.SessionV3Data���������xpsr�java.util.HashMap���`��F�

loadFactorI thresholdxp?@ w t sessionIdt 0NmViMzUxYWItZDRmZC00MWY4LWFlMmUtZjg2YmZjZGUxNjg5xx

:)

6 个答案:

答案 0 :(得分:7)

我强烈建议你不要这样做。 Java序列化意味着Java实例既可以保存也可以加载数据(用于传输到另一个Java应用程序或者在同一个应用程序的调用之间进行持久化)。它根本不是一个跨平台的协议。

我建议你在两者之间建立一个API适配器层。将Java对象的内容输出为可以在PHP中使用的格式,无论是XML,YAML,还是二进制格式(可以使用DataOutputStream)。

答案 1 :(得分:4)

将汤放入带有钢包的碗中时,用筷子吃汤最简单的方法是什么?将汤放入杯中并丢弃筷子,因为筷子是帮助消费汤的不良选择。杯子(无处不在)消除了外部依赖性,除了“嘴”和“可对立的拇指”,两者都带有标准的人类库。

更优雅的解决方案是使用JSON Serializer或XML序列化程序对该Java对象进行编码。协议缓冲区或任何其他有意的跨语言序列化技术都可以正常工作,而协议缓冲区可以有效地编码二进制数据。

答案 2 :(得分:2)

不久前我做了一些类似的事情。但是我没有让PHP读取“Java serialize”格式。我做了oposite,也就是说,使Java自身序列化为“PHP序列化”格式。这其实很容易。查看属于Solr软件包的PHPSerializedResponseWriter类:

https://github.com/terrancesnyder/solr-analytics/blob/master/solr/core/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java

...然后你所要做的只是读取字符串并调用:

$result = unserialize($string);

答案 3 :(得分:1)

根据在线PHP手册中的评论,有一个Java class序列化为您可以查看的PHP序列化格式。然后,您可以使用标准PHP功能对数据进行反序列化。

答案 4 :(得分:-1)

  

有没有办法在PHP中反序列化   用Java序列化的对象?

是。问题是,你呢?将Java对象导出为XML或JSON可能更有意义。

以下SO问题也可能有所帮助。

Dynamically create PHP object based on string

答案 5 :(得分:-1)

是否可以使用一种更常见的跨平台数据格式(如JSON)在Java应用程序和PHP之间进行通信? PHP有很多针对这些格式的解析器。查看json_decode以获取示例。

相关问题