1.对象流:ObjectInputStream和ObjectOutputStream
- 增强了缓冲区功能;
- 增强了读写8中基本数据类型和字符串功能;
- 增强了读写对象的功能;readObject()从流中读取一个对象;writeObject(Object obj)向流中写入一个对象;
使用流传输对象的过程称为序列化、反序列化;
2.序列化代码举例
import java.io.ObjectOutputStream;
/**
* 使用ObjectOutputStream实现对象的序列化
* 注意事项:
* (1)序列化类必须要实现Serializable接口
* (2)序列化类中对象属性要求实现Serializable接口
* (3)序列化版本号ID,保证序列化的类和反序列化的类是同一个对象
* (4)使用transient(瞬间的)修饰属性,这个属性不能被序列化
* (5)静态属性不能被序列化
* (6)序列化多个对象,可以借助集合实现
*/
public class ObjectOutputStreamDemo01 {
public static void main(String[] args) throws Exception {
//创建对象输出流
FileOutputStream fos = new FileOutputStream("C:\\Users\\Public\\Documents\\ppp.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
//创建对象,并进行序列化
Student s = new Student("张三",20);
oos.writeObject(s);
//关闭对象输出流
oos.close();
System.out.println("序列化完毕");
}
}
3.反序列化代码举例
package com.yundait.Demo03;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo01 {
public static void main(String[] args) throws Exception {
//1创建对象输入流对象
FileInputStream fis = new FileInputStream("C:\\Users\\Public\\Documents\\ppp.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
//读取文件
Student s = (Student) ois.readObject();
//关闭
ois.close();
System.out.println(s.toString());
}
}
3.序列化和反序列化注意事项
* 注意事项:
* (1)序列化类必须要实现Serializable接口
* (2)序列化类中对象属性要求实现Serializable接口
* (3)序列化版本号ID,保证序列化的类和反序列化的类是同一个对象
* (4)使用transient(瞬间的)修饰属性,这个属性不能被序列化
* (5)静态属性不能被序列化
* (6)序列化多个对象,可以借助集合实现

被折叠的 条评论
为什么被折叠?



