io-序列化ObjectOutputStream-反序列化ObjectInpputStream-关键字transient

关键字transient  : 表示游离,如果实例化对象里面的某个字段不参加序列化,需要在该字段前面加上该关键字

序列化一个:users 实例对象:

1、实例化对象必须 实现接口: Serializable;

2、提供无参数构造方法,有参数构造方法,重写toString方法

import java.io.Serializable;

public class User implements Serializable {
    private int no;
    // transient关键字表示游离的,不参与序列化。
    private transient String name; // name不参与序列化操作!

    public User() {
    }

    public User(int no, String name) {
        this.no = no;
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

序列化ObjectOutputStream:

一次序列化多个对象:

1、创建一个List集合(实现序列化接口)

2、给集合泛型里面一个users对象

3、参与序列化的ArrayList集合以及集合中的元素User都需要实现 java.io.Serializable接口。

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/*
一次序列化多个对象,可以将对象放到集合当中,序列化集合。
提示:
    参与序列化的ArrayList集合以及集合中的元素User都需要实现 java.io.Serializable接口。
 */
public class ObjectOutputStreamTest {
    public static void main(String[] args) throws Exception{
        List<User> userList = new ArrayList<>();
        userList.add(new User(1,"zhangsan"));
        userList.add(new User(2, "lisi"));
        userList.add(new User(3, "wangwu"));
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("users"));

        // 序列化一个集合,这个集合对象中放了很多其他对象。
        oos.writeObject(userList);

        oos.flush();
        oos.close();
    }
}

反序列化ObjectInpputStream

/*
反序列化集合
 */
public class ObjectInputStreamTest{
    public static void main(String[] args) throws Exception{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("users"));
//Object obj = ois.readObject();
//向下转型判断:测试一下该集合是否为user对象; 输出测试 :true
//System.out.println(obj instanceof List);
List<User> userList = (List<User>)ois.readObject(); for(User user : userList){ System.out.println(user); }
//关闭资源 ois.close(); } }

 

posted @ 2022-04-24 15:12  280887072  阅读(22)  评论(0编辑  收藏  举报