Java实现对象序列化与反序列化的两种方法

2025-01-15 03:28:12   小编

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对象反序列化 反序列化方法

欢迎使用万千站长工具!

Welcome to www.zzTool.com