Java对象序列化操作
简介
Java对象序列化是指将Java对象转换为字节流,以便于数据传输、持久化和分布式应用等场景下的使用。其作用是将Java对象序列化为数据流方便在网络间传输或在本地存储,以及反序列化操作使其还原为Java对象。
序列化对象
对于待序列化的Java对象,需要实现 Serializable
接口。以下是一个示例:
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String address;
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
序列化操作
在序列化Java对象时,需要使用 ObjectOutputStream
类,以下是一个实现方式:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializeDemo {
public static void main(String[] args) {
String filename = "person.ser";
Person person = new Person("Tom", 25, "Beijing");
try {
FileOutputStream fileOut = new FileOutputStream(filename);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(person);
out.close();
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Serialized data is saved in " + filename);
}
}
反序列化操作
在反序列化Java对象时,需要使用 ObjectInputStream
类,以下是一个实现方式:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializeDemo {
public static void main(String[] args) {
String filename = "person.ser";
Person person = null;
try {
FileInputStream fileIn = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(fileIn);
person = (Person) in.readObject();
in.close();
fileIn.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("Deserialized data: " + person);
}
}
示例说明
示例1:在一个分布式应用场景下,需要将用户信息从客户端传输到服务器端,需要将用户信息进行序列化并通过网络传输。科学家实现了以下代码实现该功能:
import java.io.*;
import java.net.Socket;
public class ClientInfo {
public void sendUserInfo(Socket socket, UserInfo userInfo) throws IOException {
ObjectOutputStream oos;
oos = new ObjectOutputStream(socket.getOutputStream());
// 序列化Java对象
oos.writeObject(userInfo);
oos.flush();
oos.close();
}
}
示例2:一个生产者/消费者架构下的消息传输使用对象序列化操作。生产者将对象通过序列化的方式转成字节数组后传递到消费者端,然后再使用反序列化的方式将其转化为Json数据格式。
import java.io.*;
public class SerializationUtil {
public static byte[] serialize(Object object) throws IOException {
try(ByteArrayOutputStream baos = new ByteArrayOutputStream()){
try(ObjectOutputStream oos = new ObjectOutputStream(baos)){
oos.writeObject(object);
}
return baos.toByteArray();
}
}
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
try(ByteArrayInputStream bais = new ByteArrayInputStream(bytes)){
try(ObjectInputStream ois = new ObjectInputStream(bais)){
return ois.readObject();
}
}
}
}
以上是Java对象序列化操作实例分析的完整攻略,详细介绍了如何在Java中序列化和反序列化对象,并且给出了两个示例说明,可以帮助读者更好的理解和掌握该操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java对象序列化操作实例分析 - Python技术站