2013-08-07 23 views
1

我在這個格式的PHP的數組:序列化PHP =>解序列化JAVA /序列化以字符串格式的PHP

<?php 
$value = array("id" => 42, "user" => "superman"); 
echo serialize($value); 
?> 

序列化:

a:2:{s:2:"id";i:42;s:4:"user";s:8:"superman";} 

我接收到在Java String這。 如何才能在java中對此進行反序列化? 我知道java中的implements Serializable,但在這種情況下不起作用。

我要創建這種格式的對象:

import java.io.Serializable; 

public class Serial implements Serializable{ 
    private int mId; 
    private String mUser; 

    public Serial(int mId, String mUser) { 
     super(); 
     this.mId = mId; 
     this.mUser = mUser; 
    } 
    public int getId() { 
     return mId; 
    } 
    public void setId(int id) { 
     this.mId = id; 
    } 
    public String getUser() { 
     return mUser; 
    } 
    public void setUser(String user) { 
     this.mUser = user; 
    } 
} 

之後,我想創建另一個時間String從Java對象在PHP反序列化序列化;

感謝您的幫助。

+0

[相關/重複](http://stackoverflow.com/questions/743402/unserialize-in-java-a-serialized-php-object)。使用像JSON這樣的通用格式。 –

+0

是使用雙方支持的序列化格式。 Java Serializable意味着你可以序列化對象的二進制狀態以在Java世界中傳遞它;)但是例如,給定的JSON字符串可以在你的pojo的構造函數中被解析爲JSON來填充值。 –

回答

3

你不能用另一種語言本地讀取一種語言的序列化對象(每種語言都有自己的序列化協議/格式,不能保證它們可以讀取另一種格式),Java序列化對象被序列化爲二進制格式和PHP提供的文本格式。

有庫,如Google's protocol buffers,您可以使用,他們不正式支持PHP,但有3rd party libraries這爲PHP協議緩衝支持。

協議緩衝區是谷歌的中性語言平臺中立, 擴展機制序列化結構化數據 - XML,但是 更小,更快,更簡單。您可以定義您希望數據如何構造一次,然後您可以使用特殊的生成源代碼 輕鬆地將結構化數據寫入和讀取多種數據流以及使用各種語言(Java,C++,或Python。

如果你不喜歡它,你將需要開發自己的協議,用於讀取PHP的序列化對象到Java對象,你可以,因爲我不這樣做了修改JSON庫相信您的示例序列化對象中的s:2:"id";是有效的JSON。有一個library使用Java來做這個,但是PHP序列化格式不是'安全的',因爲它可以包含空值,所以我會建議不要這樣做。

+0

謝謝你的離別!非常感謝 !爲了幫助我手動進行序列化。非常感謝 – VincentLamoute