簡體   English   中英

序列化PHP =>反序列化JAVA /以字符串格式序列化php

[英]Serialize PHP => Unserialize JAVA / Serialize for php in string format

我有這種格式的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 Serializableimplements 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中反序列化。

謝謝你的幫助。

您無法以本機語言讀取另一種語言的序列化對象(每種語言都有各自的序列化協議/格式,不能保證它們可以讀取另一種格式),Java序列化的對象序列化為二進制格式,而您提供的PHP文字格式。

您可以使用諸如Google的協議緩沖區之類的庫,它們並不正式支持PHP,但是有第三方庫提供了對PHP的協議緩沖區支持。

協議緩沖區是Google的與語言無關 ,與平台無關 ,可擴展的機制,用於對結構化數據進行序列化 (例如XML),但更小,更快,更簡單。 您可以定義如何一次構造數據,然后可以使用生成的特殊源代碼輕松地使用各種語言(Java,C ++或Python)在各種數據流之間來回寫入和讀取結構化數據。

如果您不喜歡它,則需要開發自己的協議以將PHP的序列化對象讀入Java對象,您也許可以使用修改后的JSON庫來實現此目的,因為我不相信s:2:"id"; 樣本序列化對象中的有效JSON。 有一個使用Java進行此操作的 ,但是PHP序列化格式不是“安全”的,因為它可能包含空值,所以我建議不要這樣做。

對您來說有點晚,但對其他人(包括我)可能會有用:

您可以檢查這個問題 ,它有很多答案。 對於那些沒有時間閱讀的人,這里是它帶來的主要鏈接:

1- 用於PHP反序列化的靜態類

2- Pherialize類及其衛星類

但是,正如@Robadob(和所有開發人員)所說的那樣,完成這種工作的最可靠方法是使用標准格式。

暫無
暫無

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

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