Java对象序列化时参与序列化的内容包含以下几个方面。
第一、属性,包括基本数据类型、数组以及其他对象的应用。
第二、类名。
不能被序列化的内容有以下几个方面。
第一、方法。
第二、有static修饰的属性。
第三、有transient修饰的属性。
在序列化过程中不仅保留当前类对象的数据,而且递归保存对象引用的每个对象的数据。将整个对象层次写入字节流中,这也就是序列化对象的“深复制”,即复制对象本身及引用的对象本身。序列化一个对象将可能得到整个对象序列。
在序列化过程中,由于有些属性值比较敏感(例如密码),或者有些属性值的信息量比较大,它们不需要在网络中传递或在磁盘中存储,即不需要参与序列化。对于此类属性只需要在定义时为其添加transient关键字即可,对于transien属性序列化机制会跳过而不会将其写入文件,但在读取时也不可被恢复,该属性值保持默认初始化值。
我简单的写了个代码,如下:
第一、属性,包括基本数据类型、数组以及其他对象的应用。
第二、类名。
不能被序列化的内容有以下几个方面。
第一、方法。
第二、有static修饰的属性。
第三、有transient修饰的属性。
在序列化过程中不仅保留当前类对象的数据,而且递归保存对象引用的每个对象的数据。将整个对象层次写入字节流中,这也就是序列化对象的“深复制”,即复制对象本身及引用的对象本身。序列化一个对象将可能得到整个对象序列。
在序列化过程中,由于有些属性值比较敏感(例如密码),或者有些属性值的信息量比较大,它们不需要在网络中传递或在磁盘中存储,即不需要参与序列化。对于此类属性只需要在定义时为其添加transient关键字即可,对于transien属性序列化机制会跳过而不会将其写入文件,但在读取时也不可被恢复,该属性值保持默认初始化值。
我简单的写了个代码,如下:
第一、定义序列化类型Picture
public class Picture implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String category;
private transient String url;