Java - io框架[序列化与反序列化](二)

对象流

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());
    }
}

注意:

  1. 某个类要想序列化必须实现Serializable接口
  2. 序列化类中对象属性要求实现Serializable接口
  3. 序列化版本号ID,保证序列化的类和反序列化的类是同一个类
  4. 使用transient修饰属性,这个属性就不能序列化
  5. 静态属性不能序列化
  6. 序列化多个对象,可以借助集合来实现

字符编码

ISO-8859-1 ASCII、西欧、希腊语等等

  • UTF-8 针对Unicode码表的可变长度字符编码
  • GB2312 简体中文
  • GBK 简体中文 、扩充
  • BIG5 繁体中文

上一节(字节流) 下一节(字符流)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊~小 l i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值