“序列化接口”这个说法在不同语言里含义不同,下面我按最常见的几种语言分别说明,你可以对照自己用的语言来看。
Serializable)Java 的序列化接口是 标记接口(Marker Interface),不需要实现任何方法。
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
import java.io.*;
// 序列化
ObjectOutputStream oos =
new ObjectOutputStream(new FileOutputStream("person.obj"));
oos.writeObject(new Person("张三", 20));
oos.close();
// 反序列化
ObjectInputStream ois =
new ObjectInputStream(new FileInputStream("person.obj"));
Person p = (Person) ois.readObject();
ois.close();
serialVersionUID:建议显式声明,避免版本不一致transient 修饰的字段不会被序列化✅ 适合场景:Java 原生序列化、RMI、缓存
Python 没有显式的“序列化接口”,但对象要能被 pickle。
import pickle
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("张三", 20)
# 序列化
data = pickle.dumps(p)
# 反序列化
p2 = pickle.loads(data)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __getstate__(self):
return {"name": self.name}
def __setstate__(self, state):
self.name = state["name"]
self.age = 0
✅ 适合场景:Python 内部对象存储、进程间通信
[Serializable][Serializable]
public class Person {
public string Name;
public int Age;
}
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("person.bin", FileMode.Create)) {
formatter.Serialize(fs, new Person { Name = "张三", Age = 20 });
}
⚠️ 注意:BinaryFormatter 已不被推荐使用,推荐:
System.Text.JsonXmlSerializerDataContractSerializer| 场景 | 推荐方案 |
|---|---|
| 跨语言 | JSON / Protobuf |
| 本地存储 | JSON / 文件 |
| 高性能 RPC | Protobuf / MessagePack |
| 只限 Java | Serializable |
| 只限 Python | pickle(谨慎使用) |
你可以告诉我:
我可以直接给你最合适的序列化方案 + 示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。