技术文摘
Java实现对象序列化与反序列化的两种方法
Java实现对象序列化与反序列化的两种方法
在Java开发中,对象序列化与反序列化是一项重要的技术,它允许将对象转换为字节流进行存储或传输,并在需要时重新恢复为对象。下面介绍两种常见的实现方式。
基于Java原生序列化机制
Java原生序列化机制通过实现Serializable接口来标记对象可序列化。例如,创建一个简单的类:
import java.io.Serializable;
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;
}
// getters and setters
}
序列化对象时,使用ObjectOutputStream将对象写入流中:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class SerializeExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
反序列化则使用ObjectInputStream从流中读取对象:
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class DeserializeExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println(person.getName() + " " + person.getAge());
} catch (Exception e) {
e.printStackTrace();
}
}
}
这种方式简单易用,但存在一些缺点,如生成的字节流较大,并且与Java紧密耦合。
基于JSON实现序列化与反序列化
JSON是一种轻量级的数据交换格式,使用广泛。以Jackson库为例,首先添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
定义一个与之前类似的Person类:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters
}
序列化对象:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonSerializeExample {
public static void main(String[] args) {
Person person = new Person("Bob", 25);
try {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
}
}
反序列化:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonDeserializeExample {
public static void main(String[] args) {
String json = "{\"name\":\"Bob\",\"age\":25}";
try {
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName() + " " + person.getAge());
} catch (Exception e) {
e.printStackTrace();
}
}
}
基于JSON的方式生成的字节流较小,并且具有更好的跨语言兼容性,在分布式系统和Web开发中应用广泛。
Java原生序列化机制适合简单的Java应用场景,而基于JSON的方式则更适合复杂的分布式系统和跨平台应用。开发者可根据实际需求选择合适的方法。
TAGS: 序列化方法 Java对象序列化 Java对象反序列化 反序列化方法
- JavaScript 数据脱敏的三种实现方式
- Vue 中利用 Intersection Observer 检测元素展示状态
- JavaScript 中电话号码格式化的多种途径
- Vue3 + Vite 项目引入 pinia 及 pinia-plugin-persistedstate 的方法代码
- 基于 PHP 的密码管理工具实现
- asp.net core 实现多个文件在线生成、打包为 zip 并返回的操作
- 解决 PHP 中 json 浮点精度问题的办法
- phpStudy 运行 PHP 文件中文乱码的有效解决之道
- 正则表达式匹配合法 IPv4 地址的操作之法
- PHP 页面跳转的多种实现方式
- Windows 环境中 Nginx 与 PHP 的配置流程及测试要点
- Vue 中 Element UI 组件库的使用全解
- Vue 3 中 toRaw 用法的详尽阐释
- 正则表达式验证域名的教程
- 原生微信小程序模拟 select 下拉框组件封装代码示例