⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 75.txt

📁 是一个 java 基础学习软件 有设计说明
💻 TXT
字号:
//
对象序列化

对象的持续性----可以永久性保存一个对象的状态并在需要时获取该对象的信息
(重新创建一个完全相同的对象);
对象序列化----通过写出对象的状态数据来记录一个对象。
对象序列化的主要任务:写出对象所有成员变量的值,包括引用类型成员变量对应的对象的信息。
//
对象序列化的实现方式

要序列化一个对象,其所属的类必须实现以下两种接口之一:
Serializable 在流中必须保存有恢复成兼容类型对象所需的各成员变量的值;
Externalizable类自身定义其对象的外部存储格式;
//
ObjectOutputStream类
ObjectOutputStream类提供对象的序列化处理(写出)功能:
	 FileOutputStream f = new FileOutputStream("tmp");
 ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject("Today"); s.writeObject(new Date()); 
s.flush();

writeObject方法序列化指定的对象,并遍历该对象对其它对象的引用,递归的序列化所有被引用到的其它对象,从而建立一个完整的序列化流

//
ObjectInputStream类
ObjectInputStream类提供读取序列化对象的功能:
FileInputStream in = new FileInputStream(“tmp”);
ObjectInputStream s =new ObjectInputStream(in);
String today = (String)s.readObject();
Date date = (Date)s.readObject();


readObject方法反序列化输入流中的下一个对象,遍历该对象中所有对其它对象的引用,并递归的反序列化这些引用对象。
//

ObjectOutput/ObjectInput接口
ObjectOutput接口,通过继承DataOutput接口来写出基本类型的数据。其中又定义了的一个重要的方法writeObject(),用来写出引用类型数据----对象;
ObjectInput接口是用来从存储流中读入对象的。如果被序列化对象的类名没有找到,会产生例外。

//
Serializable接口
Serializable接口只是用来标识出一个类能够被序列化,并未定义任何抽象方法

	package java.io;
	public interface Serializable {
	}

Serializable接口的实现类必须拥有一个无参数的构造方法
//

Externalizable接口
Externalizable接口继承了Serializable ,凡实现Externalizable接口的类在序列化中由该类本身来控制信息的写出和读入----定制序列化。

package java.io;
public interface Externalizable extends Serializable
{    
	public void writeExternal(ObjectOutput out)	
 	throws IOException;   
 	public void readExternal(ObjectInput in)
        throws IOException, ClassNotFoundException;
}
//
序列化的内容

什么被序列化
成员变量(包括基本数据类型、数组、对其它对象的引用)
类名
什么不被序列化
static的属性
方法
加了transient修饰符的属性

//
保护敏感数据

当开发的类能控制特定资源时,需要注意对敏感数据的保护。例如:一个File对象,当序列化保存后,该对象所代表的资源可能发生了变化(文件被移动),这时对它反序列化后,则会产生错误。

所应采取的措施:
将敏感数据定义为private transient,不进行序列化;
敏感类则不应实现Serializable或Externalizable接口;
可在writeObject和readObject方法中检查敏感数据的有效性,如无效,则可抛出NotSerializableException。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -