zoukankan      html  css  js  c++  java
  • 序列化流与反序列化流

    1、什么是序列化与反序列化?

      序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。这个过程称为序列化。通俗来说就是将数据结构或对象转换成二进制串的过程

      反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象模型的过程。也就是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程

    1.1     对象序列化流ObjectOutputStream

    ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

     第一步:创建一个 JavaBean 对象

    public class Person implements Serializable{
        private String name;
        private int age;
         
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    }
    

    如果新建的 Person 对象没有实现 Serializable 接口,那么上面的操作会报错:

     

     第二步:使用 ObjectOutputStream 对象实现序列化

    public static void main(String[] args) throws IOException {
    	FileOutputStream  fos = new FileOutputStream("D:\java1018\person.txt");
    	ObjectOutputStream  oos =new ObjectOutputStream(fos);
    	Person p =new Person("zhangsan",18);
    	oos.writeObject(p);
    	oos.close();
    }
    

     第三步:使用ObjectInputStream 对象实现反序列化

    public static void main(String[] args) throws ClassNotFoundException, IOException {
    	FileInputStream fis = new FileInputStream("D:\java1018\person.txt");
    	ObjectInputStream ois = new ObjectInputStream(fis);
    Object o= ois.readObject();
    System.out.println(o);
    ois.close();
    }
    

     如果某些数据不需要做序列化,比如密码,比如上面的年龄?

    解决办法:在字段面前加上 transient

    private String name;//需要序列化
        transient private int age;//不需要序列化
    
  • 相关阅读:
    基于Grafana的监控数据钻取功能应用实践
    将Windows下的InfluxDB、Grafana做成Windows服务
    基于InfluxDB实现分页查询功能
    Multipart/form-data POST文件上传详解
    RESTFUL接口
    正则表达式
    Spring Cloud简介
    Spring Boot初识(4)- Spring Boot整合JWT
    Spring Boot初识(3)- Spring Boot整合Swagger
    Spring Boot初识(2)- Spring Boot整合Mybaties
  • 原文地址:https://www.cnblogs.com/0826sw/p/12317474.html
Copyright © 2011-2022 走看看