对象流0bjectOutputStream/ObjectInputStream

对象流:0bjectOutputStream/ObjectInputStream

  • 增强了缓冲区功能
  • 增强了读写8种基本数据类型和字符串功能

增强了读写对象的功能:

writeObject (Object obj)向流中写入一个对象 -序列化
readObject()从流中读取一个对象 -反序列化

0bjectOutputStream序列化

注意事项
(1)序列化类必须实现Serializable接口
(2)序列化类中对象属性要求实现ObjectOutputStream接口
(3)serialVersionUID 序列化版本号ID,保证序列化的类是同一个类
(4)使用transient(瞬间的)修饰属性,这个属性不会被序列化
(5)静态属性也不能序列化
(6)序列化多个对象,可以借助集合实现

package IO.Demo04;

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

/**使用ObjectOutputStream实现对象序列化
 * 要求:(1)序列化类必须实现Serializable接口,
 * (2)序列化类中对象属性要求实现ObjectOutputStream接口
 * (3)serialVersionUID 序列化版本号ID,保证序列化的类是同一个类
 * (4)使用transient(瞬间的)修饰属性,这个属性不会被序列化
 * (5)静态属性也不能序列化
 * (6)序列化多个对象,可以借助集合实现
 * @author liu
 */
public class ObjectOutputStreamA {
    public static void main(String[] args)throws IOException {
        //1创建流
        FileOutputStream fos = new FileOutputStream("G:\\Stu.bin");
        ObjectOutputStream OOS = new ObjectOutputStream(fos);
        //2序列化(写入操作)
        Student s1 = new Student("张三",20);
        Student s2 = new Student("李思",40);
        ArrayList<Student> stu =new ArrayList<>();
        stu.add(s1);
        stu.add(s2);
        OOS.writeObject(stu);
/*        OOS.writeObject(s1);
        OOS.writeObject(s2);*/
        //3关闭流
        OOS.close();
        System.out.println("序列化完毕");
    }
}

ObjectInputStream反序列化

package IO.Demo04;

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;

/**
 * @author liu
 */
public class ObjectInputStreamA {
    public static void main(String[] args) throws Exception {
        //1创建对象流
        FileInputStream fis = new FileInputStream("G:\\Stu.bin");
        ObjectInputStream ois = new ObjectInputStream(fis);
        //2读取文件(反序列化)
/*        Student s1= (Student) ois.readObject();
        Student s2= (Student) ois.readObject();*/
        ArrayList<Student> stu = (ArrayList<Student>) ois.readObject();
        //3关闭流
        ois.close();
        System.out.println("执行完毕");
/*        System.out.println(s1);
        System.out.println(s2);*/
        System.out.println(stu);
    }
}

对象

package IO.Demo04;

import java.io.Serializable;

public class Student implements Serializable {
    /*
    * serialVersionUID 序列化版本号ID
    * */
    private static final long serialVersionUID = 110L;
    private String name;
    private transient int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
posted @   小幼虫虫  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示