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;//不需要序列化
    
  • 相关阅读:
    移动开发iOS&Android对比学习--异步处理
    PHP中文乱码解决办法[转]
    在eclipse里配置Android ndk环境 适用于windows mac 和linux[转]
    android在更新ADT以后报java.lang.NoClassDefFound的解决办法
    在Mac OS下配置PHP开发环境
    在iOS中使用百度地图
    简单说明CentOS源码安装程序
    SecureFXPortable中文乱码
    从Linux下载文件到Windows没有换行问题
    从Windows复制文件到Linux显示乱码问题
  • 原文地址:https://www.cnblogs.com/0826sw/p/12317474.html
Copyright © 2011-2022 走看看