序列化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 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;
    }
}

之后,我想创建另一个时间从 Java 对象序列化的String,以便在 PHP 中进行反序列化;

感谢您的帮助。

您不能用另一种语言本地读取一种语言的序列化对象(每种语言都有自己的序列化协议/格式,不能保证它们可以读取彼此的格式(,Java 序列化对象序列化为二进制格式,PHP 提供的文本格式。

您可以使用诸如Google的协议缓冲区之类的库,它们不正式支持PHP,但是有第三方库为PHP提供协议缓冲区支持。

协议缓冲区是谷歌的语言中立的平台中立的, 用于序列化结构化数据的可扩展机制 - 考虑 XML,但 更小、更快、更简单。定义数据的预期方式 结构化一次,那么您可以使用特殊生成的源代码来 轻松在各种 数据流并使用多种语言 - Java,C++或Python。

如果您不喜欢这样做,则需要开发自己的协议,将PHP序列化对象读取到Java对象中,您可以使用修改后的JSON库来执行此操作,因为我不相信示例序列化对象中的s:2:"id";是有效的JSON。有一个使用 Java 执行此操作的库,但是 PHP 序列化格式并不"安全",因为它可能包含空值,所以我建议不要这样做。

对你来说有点晚了,但可能对其他人(包括我(有用:

你可以检查这个问题,它有很多答案。对于那些没有时间阅读的人,以下是它指向的主要链接:

1-用于PHP反序列化的静态类

2-Pherialize类及其卫星类

正如@Robadob(和所有开发人员(所说,完成此类工作最可靠的方法是使用标准格式。