有没有办法在PHP中反序列化用Java序列化的对象? IE如果我有一个实现序列化的Java类,我使用ObjectOutputStream来编写对象,并将结果转换为字符串,那么PHP中是否有一种方法可以获取该字符串并从中创建类似的对象表示?
Java序列化数据是什么样的?
回应:
���sr�com.site.entity.SessionV3Data���������xpsr�java.util.HashMap���`��F�
loadFactorI thresholdxp?@ w t sessionIdt 0NmViMzUxYWItZDRmZC00MWY4LWFlMmUtZjg2YmZjZGUxNjg5xx
:)
答案 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
类:
...然后你所要做的只是读取字符串并调用:
$result = unserialize($string);
答案 3 :(得分:1)
根据在线PHP手册中的评论,有一个Java class序列化为您可以查看的PHP序列化格式。然后,您可以使用标准PHP功能对数据进行反序列化。
答案 4 :(得分:-1)
有没有办法在PHP中反序列化 用Java序列化的对象?
是。问题是,你呢?将Java对象导出为XML或JSON可能更有意义。
以下SO问题也可能有所帮助。
答案 5 :(得分:-1)
是否可以使用一种更常见的跨平台数据格式(如JSON)在Java应用程序和PHP之间进行通信? PHP有很多针对这些格式的解析器。查看json_decode以获取示例。