java - 序列化 PHP => 反序列化 JAVA/Serialize for php in string format

标签 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 中进行反序列化;

感谢您的帮助。

最佳答案

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

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

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages – Java, C++, or Python.

如果您不喜欢它,您将需要开发自己的协议(protocol)来将 PHP 序列化对象读入 Java 对象,您可以使用修改后的 JSON 库来完成此操作,因为我不相信 s:2:"id";来自您的示例序列化对象的是有效的 JSON。存在用于使用 Java 执行此操作的 library,但是 PHP 序列化格式并不“安全”,因为它可以包含空值,因此我建议不要这样做。

关于java - 序列化 PHP => 反序列化 JAVA/Serialize for php in string format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104274/

相关文章:

php - 在单独的目录/文件中处理 AJAX 请求

java - 我正在尝试创建一种方法来计算两个数组中数字的平均值

c++ - 使用结构元素获取结构数组

javascript - ajax调用后将响应发送回php

php - 删除数组中相邻的相似值

java - 部署到应用程序服务器后出现 404,但不在本地

java - activemq中未加载页面文件异常

java - 当从另一个对话框调用对话框时,软键盘不会在对话框关闭时隐藏

java - 无法在 Eclipse 中使用 htmlunitsdriver

php - 在 Laravel 中使用 redis 作为队列驱动程序的作业失败表