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 序列化復雜度低,序列化后的數據量小、效率高,但不支持循環引用等一些高級特性。因此,選擇序列化方式時需要根據具體使用場景酌情選擇。