【问题标题】:Serialize PHP => Unserialize JAVA / Serialize for php in string formatSerialize PHP => Unserialize JAVA / Serialize for php in string format
【发布时间】:2013-08-07 13:10:34
【问题描述】:

我在 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 中反序列化;

感谢您的帮助。

【问题讨论】:

  • Related/duplicate。使用 JSON 等通用格式。
  • 是的,使用双方都支持的序列化格式。 Java Serializable 意味着您可以序列化对象的二进制状态以将其传输到 Java 世界中;)但是例如,可以在 pojo 的构造函数中将给定的 JSON 字符串解析为 JSON 以填充值。

标签: java php arrays serialization deserialization


【解决方案1】:

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

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

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

如果你不喜欢这样,你需要开发你自己的协议来将 PHP 序列化的对象读入 Java 对象,你可以用一个修改过的 JSON 库来做到这一点,因为我不相信@您的示例序列化对象中的 987654324@ 是有效的 JSON。有一个 library 用于使用 Java 执行此操作,但是 PHP 序列化格式不是“安全”的,因为它可以包含空值,所以我建议不要这样做。

【讨论】:

  • 谢谢你的离别!非常感谢 !为了帮助我手动进行序列化。非常感谢
【解决方案2】:

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

你可以查看this question,里面有很多答案。 对于那些没有时间阅读的人,这里是它指向的主要链接:

1-A static class for PHP de/serialization

2-The Pherialize class with its satellite classes

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

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2011-12-12
    • 2011-11-06
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多