Java序列化机制与跨语言通信实践

一、基于JVM默认序列化的对象传输

1.1 核心实现与代码示例

通过 Client.javaServer.java实现Java原生序列化通信:

// Client发送序列化对象
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(request); // 发送Message对象

// Server接收并反序列化
ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
Message request = (Message) ois.readObject();

1.2 关键点说明

序列化接口Message类需实现 Serializable 接口 。
字节流传输:JVM将对象转化为二进制字节流,适合高性能Java间通信。
应用场景:微服务框架(如Dubbo)、分布式缓存等纯Java环境。


二、serialVersionUID的作用与版本控制

2.1 显式声明的重要性

Message.javaUser.java 中显式定义:

private static final long serialVersionUID = 1L;

2.2 核心作用

版本一致性校验:反序列化时比对类的serialVersionUID,防止类结构变更导致InvalidClassException
避免隐式生成问题:未显式声明时,JVM根据类结构哈希生成UID,类字段变更会破坏兼容性。

2.3 应用场景

长期存储对象:如缓存持久化。
分布式系统升级:确保服务端与客户端类版本一致。


三、transient关键字与敏感字段保护

3.1 使用示例

User.java 中标记passwordtransient

private transient String password; // 不被序列化

3.2 功能解析

字段排除:序列化时忽略敏感或冗余数据。
自定义初始化:通过readObject方法手动恢复 :

private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
    ois.defaultReadObject();
    password = "default"; // 初始化transient字段
}

3.3 应用场景

安全敏感数据:如密码、密钥。
运行时计算字段:如缓存计算结果。


四、基于Gson的跨语言通信实现

4.1 跨语言通信原理

通用数据格式:使用JSON代替Java二进制流 JavaServer接收字符串)。
Gson序列化:将对象转为JSON字符串,Python可通过json库解析。

4.2 代码实现

// Java客户端发送JSON
Gson gson = new Gson();
String json = gson.toJson(request);
writer.println(json);

// Python服务端解析
import json
data = json.loads(received_str)

4.3 应用场景

异构系统交互:如Java后台与Python数据分析服务通信。
HTTP API设计:JSON作为通用数据格式。


五、序列化字节流与通用数据结构

5.1 核心差异对比

类型特点适用场景
JVM序列化Java专属二进制格式同语言高性能通信
JSON/XML文本通用格式跨语言平台交互

5.2 示例说明

Java专属问题Client.java 发送的字节流无法被Python解析。
通用方案:如JavaServer`接收字符串,配合JSON实现跨语言。

代码链接

https://gitee.com/shen-binbin/serialization.git
其中python脚本地址:src/main/resources/script/gson.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值