簡體   English   中英

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

[英]How to deserialize in PHP an object serialized in Java

有沒有辦法在PHP中反序列化一個用Java序列化的對象? IE如果我有一個實現序列化的Java類,我使用ObjectOutputStream來編寫對象,並將結果轉換為字符串,那么PHP中是否有一種方法可以獲取該字符串並從中創建類似的對象表示?

Java Serialized數據是什么樣的?

響應:

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

loadFactorI thresholdxp?@ w t sessionIdt 0NmViMzUxYWItZDRmZC00MWY4LWFlMmUtZjg2YmZjZGUxNjg5xx

:)

我強烈建議你不要這樣做。 Java序列化意味着Java實例既可以保存也可以加載數據(用於傳輸到另一個Java應用程序或者在同一個應用程序的調用之間進行持久化)。 它根本不是一個跨平台的協議。

我建議你在兩者之間建立一個API適配器層。 將Java對象的內容輸出為可以在PHP中使用的格式,可以是XML,YAML,甚至是二進制格式(可以使用DataOutputStream)。

將湯放入帶有鋼包的碗中時,用筷子吃湯的最簡單方法是什么? 將湯放入杯中並丟棄筷子,因為筷子是幫助消費湯的不良選擇。 杯子(無處不在)消除了外部依賴性,除了“嘴”和“可對立的拇指”,兩者都帶有標准的人類庫。

更優雅的解決方案是使用JSON Serializer或XML序列化程序對該Java對象進行編碼。 協議緩沖區或任何其他有意的跨語言序列化技術可以正常工作,而協議緩沖區可以有效地編碼二進制數據。

前段時間我做了類似的事情。 但是我沒有讓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);

根據在線PHP手冊中的注釋,有一個Java類可以序列化為您可以查看的PHP序列化格式。 然后,您可以使用標准PHP功能對數據進行反序列化。

有沒有辦法在PHP中反序列化一個用Java序列化的對象?

是。 問題是,你呢? 將Java對象導出為XML或JSON可能更有意義。

以下SO問題也可能有所幫助。

基於字符串動態創建PHP對象

是否可以使用一種更常見的跨平台數據格式(如JSON)在Java應用程序和PHP之間進行通信? PHP有很多針對這些格式的解析器。 查看json_decode的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM