当前位置: 首页 >  技术宝典 >  java序列化 教程

java序列化 教程

导读:序列化的 条件:.序列化必须要满足两个条件:.1. 该对象必须实现 java.io.Serializble 接口.2. 改对象的所有属性必须是可序列化的,若有属性不可序列化也须注明是短暂的.注:检验一个类是否可以被序列化,可以检验该类是否实现 Serializble 接口.序列化

序列化的 条件:

序列化必须要满足两个条件:

1. 该对象必须实现 java.io.Serializble 接口

2. 改对象的所有属性必须是可序列化的,若有属性不可序列化也须注明是短暂的

注:检验一个类是否可以被序列化,可以检验该类是否实现 Serializble 接口

序列化的定义:

把对象转换成可传输的字节序列的过程

反序列化的定义:

把字节序列转还原对象的过程

为什么要序列化?

最终目的地为了 跨平台存储 和 进行网络传输 而进行网络传输都是 IO 而进行IO所支持的还是 数组

序列化实例:

定义 student 类 并 实现了 java.io.Serializble 接口

public class studentDemo implements java.io.Serializable {
    public String name;
    public int phone;
    public String address;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPhone() {
        return phone;
    }
    public void setPhone(int phone) {
        this.phone = phone;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

-—–序列化——

序列化成功之后会在当前路径创建 以 “张三”名字 为文件名的 .ser 的文件

序列化 需要用到 FileOutputStream() 文件输出流 和 ObjectOutputStream() 对象输出流

使用 文件输出流 创建 文件路径和名称 再通过 对象流的 writeObjec()方法 写入到系统中

每次使用完 IO流 一定要记得 关闭流 close() 方法

public class SerializeDemo {
    public static void main(String[] args) {
        studentDemo stu = new studentDemo(); 
        stu.setName("张三");
        stu.setPhone( 1233467733 );
        stu.setAddress("江西");

        try {
            FileOutputStream fileOut = new FileOutputStream("student" + stu.name + ".ser"); // 创建 文件路径、文件名字
            ObjectOutputStream out = new ObjectOutputStream(fileOut); // 创建 对象输出流系统
            out.writeObject( stu ); // 写入需要的对象名
            fileOut.close(); // 关闭文件流
            out.close(); // 关闭对象输入流

            System.out.println( "---序列化对象成功---" );

        } catch ( IOException e) {
            e.printStackTrace(); // 出现异常 初始化try
        }
    }
}

-——反序列化——-

反序列化是将 序列化的文件的内容读取出来的过程,和序列化是相对的

需要使用到 FileInputStream() 文件输入流 和 ObjectInputStream() 对象输入流 再用对象流的 readObject() 读取文件中的内容

public class UnSerializble  {
    public static void main(String[] args) {
        String name = "张三";

        try {
            FileInputStream fileInt = new FileInputStream("student" + name + ".ser"); // 创建文件输入流
            ObjectInputStream ois = new ObjectInputStream( fileInt );  // 创建对象输入流 
            studentDemo stu = (studentDemo) ois.readObject(); // 读取的对象强制成为 studentDemo 类

            System.out.println("---反序列化内容---");
            System.out.println( "name:" + stu.getName() );
            System.out.println( "phone:" + stu.getPhone());
            System.out.println( "address:" + stu.getAddress());

            fileInt.close();
            ois.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}
内容
  • Docker的Portainer认识、安装、使用
    Docker的Portainer
    2023-12-08
    一、认识.docker的图形化界面.Portainer 是一个轻量级的容器管理界面,可以让用户更轻松地管理 Docker
  • misc刷题
    misc刷题
    2023-12-04
    lsb隐写.引用一段百度内容.> LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛
  • 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
    虹科案例 | 丝芙兰xDomo:
    2023-12-05
    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段。身为数据驱动型企业,2018年以来,丝芙兰就率先在
  • 密评相关要求介绍
    密评相关要求介绍
    2023-12-04
    密评相关要求介绍.项目建设单位需从物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全等四个层面采用密码技术措
  • SonarQube系列-通过配置扫描分析范围,聚焦关键问题
    SonarQube系列-通过配置
    2023-12-04
    在许多情况下,你可能不希望分析项目中每个源文件的各个方面。例如,项目可能包含生成的代码、库中的源代码或有意复制的代码。在
  • SublimeText实现Markdown快速预览
    SublimeText实现Mar
    2023-12-07
    SublimeText是什么?.SublimeText是一个文本编辑器,同时也是一个先进的代码编辑器。SublimeTe