对象流
ObjectOutputStream / ObjectInputStream
- 增强了缓冲区功能
- 增强了读写8种基本数据类型和字符串的功能
- 增强了读写对象的功能
- readObject() 从流中读取一个对象
- writeObject(Object obj) 向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化
序列化
package zijieliu;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/**
* 使用ObjectOutputStream实现对象序列化
*要求序列化的类必须实现Serializable接口
*/
public class demo2 {
public static void main(String[] args) throws Exception{
FileOutputStream file = new FileOutputStream("d:\\stu.bin");
ObjectOutputStream oos = new ObjectOutputStream(file);
// 写入操作
student zhangsan = new student("张三",20);
oos.writeObject(zhangsan);
// 关闭
oos.close();
System.out.println("写入完成!");
}
}
反序列化
package zijieliu;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class demo3 {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("d:\\stu.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
// 2. 读取文件(反序列化)
student s = (student) ois.readObject();
// 3. 关闭
ois.close();
System.out.println("执行完毕");
System.out.println(s.toString());
}
}
注意:
- 某个类要想序列化必须实现Serializable接口
- 序列化类中对象属性要求实现Serializable接口
- 序列化版本号ID,保证序列化的类和反序列化的类是同一个类
- 使用transient修饰属性,这个属性就不能序列化
- 静态属性不能序列化
- 序列化多个对象,可以借助集合来实现
字符编码
ISO-8859-1 ASCII、西欧、希腊语等等
- UTF-8 针对Unicode码表的可变长度字符编码
- GB2312 简体中文
- GBK 简体中文 、扩充
- BIG5 繁体中文
上一节(字节流) 下一节(字符流)