在Java中,将对象序列化为二进制码的过程涉及以下步骤和注意事项:
一、实现Serializable接口
要序列化对象,首先需要让该类实现`java.io.Serializable`接口。这是Java序列化的基础要求。
```java
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
// 构造方法、getter和setter省略
}
```
关键点:
`serialVersionUID`:用于版本控制,确保反序列化时类结构一致。若类结构变化,需修改此值以保持兼容性。
二、序列化对象为二进制数据
使用`ObjectOutputStream`将对象写入二进制文件或流中。
```java
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
public class SerializeExample {
public static void main(String[] args) {
Person person = new Person("张三", 30);
try (FileOutputStream fos = new FileOutputStream("person.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(person);
System.out.println("对象已序列化到person.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
三、反序列化二进制数据
使用`ObjectInputStream`将二进制数据还原为对象。
```java
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
public class DeserializeExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("person.ser");
ObjectInputStream ois = new ObjectInputStream(fis)) {
Person person = (Person) ois.readObject();
System.out.println("反序列化后的对象: " + person.getName() + ", " + person.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
四、注意事项
若类结构变化(如添加/删除字段),需修改`serialVersionUID`。若未显式声明,Java会自动生成,但可能导致反序列化失败。
静态字段、transient字段(标注`transient`)及`final`字段不会被序列化。
序列化/反序列化可能抛出`IOException`或`ClassNotFoundException`,需适当处理。
五、扩展应用
二进制存储:可将序列化后的字节数组保存到文件或数据库中,便于持久化或网络传输。
网络传输:通过套接字或文件传输协议(如HTTP)发送二进制数据。
通过以上步骤,Java对象可高效地转换为二进制码,并实现持久化或跨系统传输。