当先锋百科网

首页 1 2 3 4 5 6 7

Java 序列化和 Hessian 序列化都是用于将 Java 对象转换为字节流的过程,以便在网络上传输或持久化到磁盘中。然而,它们之间有着一些根本性的区别。

Java 序列化是 JDK 自带的一种序列化方式。使用 Java 序列化,首先需要让待序列化的对象实现java.io.Serializable接口,然后通过调用ObjectOutputStream将对象序列化。接收端可以通过相应的输入流对序列化后的字节进行反序列化。

public class Person implements Serializable {
private String name;
private int age;
// constructors
// getters and setters
// other methods
}
Person person = new Person("Tom", 20);
FileOutputStream fos = new FileOutputStream("person.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(person);
oos.close();
FileInputStream fis = new FileInputStream("person.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Person newPerson = (Person) ois.readObject();
ois.close();

Hessian 序列化是一种基于 HTTP 协议的轻量级网络协议。它通过运行时动态代理来实现序列化和反序列化,而不需要任何类具有特定的序列化接口。它可以将任何 Java 对象转换为字节流,并通过 HTTP 协议进行传输。相比 Java 序列化,Hessian 序列化更加简洁、高效。

public interface PersonService {
Person getPerson(String name, int age);
}
HessianProxyFactory factory = new HessianProxyFactory();
PersonService service = (PersonService) factory.create(PersonService.class,
"http://localhost:8080/person-service");
Person person = service.getPerson("Tom", 20);

Java 序列化和 Hessian 序列化各有优缺点。Java 序列化简单易用,可以将任何 Java 对象序列化,但序列化后的数据量大、效率低。Hessian 序列化复杂度低,序列化后的数据量小、效率高,但不支持循环引用等一些高级特性。因此,选择序列化方式时需要根据具体使用场景酌情选择。