Java序列化支持多種數據類型,主要包括以下幾類:
byte
short
int
long
float
double
char
boolean
數組:
類實例:
Serializable
接口的類的對象可以被序列化。包裝類:
Integer
, Long
, Double
, Float
, Boolean
, Character
, Byte
, Short
等。字符串:
String
類實現了Serializable
接口,因此字符串對象可以被序列化。日期和時間類:
Date
, Calendar
, LocalDate
, LocalTime
, LocalDateTime
等。集合框架:
ArrayList
, LinkedList
, HashSet
, LinkedHashSet
, TreeSet
, HashMap
, LinkedHashMap
, TreeMap
等,前提是它們的元素類型也是可序列化的。枚舉類型:
Serializable
接口。其他標準庫類:
Serializable
接口,例如File
, Socket
, URL
等。瞬態字段(transient fields):
transient
關鍵字修飾的字段不會被序列化。靜態字段(static fields):
自定義序列化邏輯:
writeObject
和readObject
方法來自定義序列化和反序列化的過程。版本兼容性:
import java.io.*;
public class SerializationExample implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private transient String password; // 不會被序列化
private Date creationDate;
public SerializationExample(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
this.creationDate = new Date();
}
public static void main(String[] args) {
SerializationExample obj = new SerializationExample(1, "John Doe", "secret");
// 序列化
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.ser"))) {
oos.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.ser"))) {
SerializationExample deserializedObj = (SerializationExample) ois.readObject();
System.out.println("ID: " + deserializedObj.id);
System.out.println("Name: " + deserializedObj.name);
System.out.println("Creation Date: " + deserializedObj.creationDate);
// password字段為null,因為它沒有被序列化
System.out.println("Password: " + deserializedObj.password);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
通過上述代碼可以看到,transient
修飾的字段password
在反序列化后為null
,而其他字段則被正確地序列化和反序列化。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。