序列化PHP =>以字符串格式反序列化JavaScript的JAVA / Serialize

时间:2013-08-07 13:10:34

标签: java php arrays serialization deserialization

我在这种格式的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中进行反序列化;

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

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

您可以使用诸如Google's protocol buffers之类的库,它们不正式支持PHP,但有3rd party libraries为PHP提供协议缓冲区支持。

  

协议缓冲区是Google的语言中立平台中立,   用于序列化结构化数据的可扩展机制 - 想想XML,但是   更小,更快,更简单。您可以定义数据的方式   结构化一次,然后您可以使用特殊生成的源代码   轻松地将结构化数据写入和读取各种各样的数据   数据流和使用各种语言 - Java,C ++或Python。

如果您不喜欢它,您将需要开发自己的协议来将PHP序列化对象读取到Java对象中,您可以使用修改后的JSON库来执行此操作,因为我不相信{来自示例序列化对象的{1}}是有效的JSON。使用Java执行此操作时存在library,但PHP序列化格式不是“安全”,因为它可以包含空值,因此我建议不要使用它。

答案 1 :(得分:2)

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

您可以查看this question,其中有很多答案。 对于那些没有时间阅读的人,以下是它的主要链接:

1- A static class for PHP de/serialization

2- The Pherialize class with its satellite classes

但是正如@Robadob(以及所有开发者)所说,做这种工作最可靠的方法是使用标准格式。