序列化对象(ObjectOutputStream,ObjectInputStream)

1、对象序列化

  • 作用:以 内存 为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化
  • 使用到的流是对象字节输出流:ObjectOutputStream
package com.csdn.d7_serializable;
import java.io.*;
public class ObjectOutputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //1.创建学生对象
        Student s = new Student("小明", "xm", "123456", 21);
        //2.对象序列化:使用对象字节输出流包装字节输出流管道
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src\\csdn.txt"));
        //3.直接调用序列化方法
        oos.writeObject(s);
        //4.释放资源
        oos.close();
        System.out.println("序列化完成了~~");
        @Override
        public String toString() {
          return "Student{" +
                 "name='" + name + '\'' +
                 ", loginName='" + loginName + '\'' +
                 ", passWord='" + passWord + '\'' +
                 ", age=" + age +
                 '}';
        }
    }
}
//对象如果要序列化,必须实现Serializable序列化接口
class Student implements Serializable {
    private String name;
    private String loginName;
    private String passWord;
    private int age;

    public Student(String name, String loginName, String passWord, int age) {
        this.name = name;
        this.loginName = loginName;
        this.passWord = passWord;
        this.age = age;
    }

}
构造器说明
public ObjectOutputStream(OutputStream out)把低级 字节 输出流 包装 成高级的对象 字节 输出流
方法名称说明
public final void  writeObject(Object  obj)把 对象 写出去到对象序列化流的文件中去

  • 为了好展示,我把序列化的文本换行了,反序列化的时候,不能换行,否则会报错 :Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: EFBFBDEF

 2、对象序列化的含义是什么?

  • 把对象数据存入到文件中去

 3、对象序列化用到了哪个流?

  • 对象字节输出流 ObjectOutputStream
  • public final  void  writeObject(Object  obj)

 4、序列化对象的要求是怎么样的?

  • 对象必须实现序列化接口

 1、对象反序列化

  • 使用到的流是对象字节输入流:ObjectInputStream
  • 作用:以内存为基准,把存储到 磁盘 文件中去的对象数据恢复成 内存 中的对象,称为对象反序列化
package com.csdn.d7_serializable;
import java.io.*;
public class ObjectInputStreamDemo2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1.创建对象字节输入流管道包装低级的字节输入流管道
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src\\csdn.txt"));
        //2.调用对象字节输入流的反序列化方法
        Student s = (Student) ois.readObject();

        System.out.println(s);
        //Student{name='小明', loginName='xm', passWord='123456', age=21}
    }
}
构造器说明
public ObjectInputStream(InputStream out)低级 字节流输入流 包装 成 高级 的对象字节输入流
方法名称说明
public final Object  readObject()把存储到 磁盘 文件中去的 对象 数据恢复成 内存 中的 对象 返回

 2、对象反序列化的含义是什么?

  • 把磁盘中的对象数据恢复到内存的Java对象中

 3、对象反序列化用到了哪个流?

  • 对象字节输入流ObjectInputStream
  • public  final Object  readObject()

 4、 密码不参与序列化的操作步骤

  • 防止别人获取密码
    private String name;
    private String loginName;
    //transient修饰的成员变量不参与序列化
    private transient String passWord;
    private int age;

  • Student { name = ' 小明 ' ,  loginName = ' xm ' ,  passWord = ' null ' , age = 21 }
    //声明序列化的版本号码
    //序列化的版本号与反序列化的版本号必须一致才不会出错!
    private static final long serialVersionUID = 1;
    private String name;
    private String loginName;
    //transient修饰的成员变量不参与序列化
    private transient String passWord;
    private int age;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值