Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java 序列化


Java 提供了多种序列化的方式,其中最常用的是使用 Java 内置的序列化机制,即通过实现 java.io.Serializable 接口来实现对象的序列化和反序列化。下面我将介绍这种方式以及其他一些常见的序列化方式,并附上示例代码。

Java 内置序列化机制(java.io.Serializable)

步骤流程:

  1. 在要序列化的类中实现 java.io.Serializable 接口。
  2. 在该类中定义需要被序列化的属性。
  3. 使用 ObjectOutputStream 将对象序列化到输出流中。
  4. 使用 ObjectInputStream 从输入流中反序列化对象。

示例代码:

import java.io.*;

class Person implements Serializable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and setters
}

public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);

        try {
            // Serialization
            FileOutputStream fileOut = new FileOutputStream("person.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(person);
            out.close();
            fileOut.close();

            // Deserialization
            FileInputStream fileIn = new FileInputStream("person.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            Person deserializedPerson = (Person) in.readObject();
            in.close();
            fileIn.close();

            System.out.println("Deserialized Person: " + deserializedPerson.getName() + ", " + deserializedPerson.getAge());
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

JSON 序列化

步骤流程:

  1. 使用第三方库(如 Jackson、Gson)导入 JSON 库。
  2. 创建对象并设置属性。
  3. 使用 JSON 库将对象转换为 JSON 字符串。
  4. 反序列化时,将 JSON 字符串转换回对象。

示例代码(使用 Jackson 库):

import com.fasterxml.jackson.databind.ObjectMapper;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and setters
}

public class JsonSerializationExample {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = new Person("Bob", 25);

        try {
            // Serialization
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println("JSON: " + jsonString);

            // Deserialization
            Person deserializedPerson = objectMapper.readValue(jsonString, Person.class);
            System.out.println("Deserialized Person: " + deserializedPerson.getName() + ", " + deserializedPerson.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

XML 序列化

步骤流程:

  1. 使用 Java 提供的 XML 相关库(如 JAXB)或第三方库。
  2. 创建对象并设置属性。
  3. 使用库将对象转换为 XML 格式。
  4. 反序列化时,将 XML 转换回对象。

示例代码(使用 JAXB):

import javax.xml.bind.*;
import java.io.StringWriter;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and setters
}

public class XmlSerializationExample {
    public static void main(String[] args) {
        try {
            // Serialization
            Person person = new Person("Charlie", 28);
            JAXBContext context = JAXBContext.newInstance(Person.class);
            Marshaller marshaller = context.createMarshaller();
            StringWriter writer = new StringWriter();
            marshaller.marshal(person, writer);
            String xmlString = writer.toString();
            System.out.println("XML: " + xmlString);

            // Deserialization
            String xml = "<person><age>28</age><name>Charlie</name></person>";
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Person deserializedPerson = (Person) unmarshaller.unmarshal(new StringReader(xml));
            System.out.println("Deserialized Person: " + deserializedPerson.getName() + ", " + deserializedPerson.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这些是 Java 中常见的序列化方式。根据你的需求和项目特点,选择适合的方式来实现对象的序列化和反序列化。

在Java中,序列化ID是为了在对象序列化和反序列化过程中唯一标识一个类的版本,以确保类的结构没有发生变化。示例代码:###手动生成固定的序 ...
通过 alibaba 的 fastjson 库序列化 java bean 对象时,字段/属性如何在 JSON.toJSONString(be ...
Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。每个用双引号括起来的字符串都是 ...
在Java中使用Redis主要涉及使用Redis客户端库来与Redis服务器进行通信。步骤流程:添加Maven依赖:编写Java代码示例:# ...
Java 是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级 Web 应用开发和移动应用开发。 ...