常见的Java序列化框架有哪些?

  • Post category:Java

常见的Java序列化框架包括Java序列化、JSON序列化、XML序列化和Protobuf序列化等。以下分别简单介绍这几种序列化框架的使用攻略:

Java序列化

Java序列化是Java语言自带的序列化框架,通过将Java对象转化为字节流或字符流的方式进行序列化和反序列化。使用Java序列化通常需要实现Serializable接口并通过ObjectInputStream和ObjectOutputStream进行序列化和反序列化。

示例:

假设我们有一个User类,需要将其序列化并存储到硬盘上。可以按照以下步骤进行:

  1. 在User类中实现Serializable接口
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    // 省略getter、setter方法和构造方法
}
  1. 创建一个ObjectOutputStream对象,并将User对象序列化到文件中
try (OutputStream fileOut = new FileOutputStream("user.ser");
     ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)) {
    User user = new User();
    user.setName("Jack");
    user.setAge(20);
    objectOut.writeObject(user);
} catch (IOException e) {
    e.printStackTrace();
}
  1. 从文件中读取User对象
try (InputStream fileIn = new FileInputStream("user.ser");
     ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
    User user = (User) objectIn.readObject();
    System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

JSON序列化

JSON序列化可以将Java对象转化为JSON格式的字符串,便于在网络传输或存储时使用。Jackson是JSON序列化的常用框架,使用方式简单方便。

示例:

假设我们有一个User类,需要将其序列化为JSON字符串。可以按照以下步骤进行:

  1. 添加Jackson依赖
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.5</version>
</dependency>
  1. 创建一个ObjectMapper对象,并将User对象序列化为JSON字符串
ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.setName("Jack");
user.setAge(20);
try {
    String jsonString = mapper.writeValueAsString(user);
    System.out.println(jsonString);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}
  1. 将JSON字符串反序列化为User对象
String jsonString = "{\"name\":\"Jack\",\"age\":20}";
try {
    User user = mapper.readValue(jsonString, User.class);
    System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

XML序列化

XML序列化与JSON序列化类似,可以将Java对象转化为XML格式的字符串。JAXB是XML序列化的常用框架,使用方式简单明了。

示例:

假设我们有一个User类,需要将其序列化为XML字符串。可以按照以下步骤进行:

  1. 创建一个JAXBContext对象
JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
  1. 创建一个Marshaller对象,并将User对象序列化为XML字符串
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

User user = new User();
user.setName("Jack");
user.setAge(20);
StringWriter writer = new StringWriter();
marshaller.marshal(user, writer);
System.out.println(writer.toString());
  1. 将XML字符串反序列化为User对象
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
User user = (User) unmarshaller.unmarshal(reader);
System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());

Protobuf序列化

Protobuf是Google开发的一种高效的序列化框架,相比Java序列化和JSON序列化更加轻量级和高效。使用Protobuf需要定义一个.proto文件,并使用相关的工具生成Java代码。

示例:

假设我们有一个User类,需要将其序列化为Protobuf格式的字节数组。可以按照以下步骤进行:

  1. 编写User.proto文件
syntax = "proto3";

message User {
    string name = 1;
    int32 age = 2;
}
  1. 使用protoc工具生成Java代码
protoc --java_out=./ User.proto
  1. 创建一个User对象,并将其序列化为Protobuf格式的字节数组
UserOuterClass.User.Builder builder = UserOuterClass.User.newBuilder();
builder.setName("Jack");
builder.setAge(20);
UserOuterClass.User user = builder.build();
byte[] bytes = user.toByteArray();
  1. 将字节数组反序列化为User对象
UserOuterClass.User user = UserOuterClass.User.parseFrom(bytes);
System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());

至此,以上Java序列化框架的使用攻略完毕。