我在这种格式的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中进行反序列化;
感谢您的帮助。
答案 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(以及所有开发者)所说,做这种工作最可靠的方法是使用标准格式。