将内存中的java对象放到硬盘叫做序列化(会将Java1对象切成一条条的传输)(拆分对象)
硬盘到内存叫做反序列化(组装的对象)
序列化(Serialize)(将java对象的状态保存下来的过程)
ObjectOutputStream

反序列化(DeSerialize)(恢复成java对象)
ObjeceInputStream

package com.bjpowernode.java.io;

import com.bjpowernode.java.bean.Student;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/*
1、java.io.NotSerializableException:
    Student对象不支持序列化!!!!

2、参与序列化和反序列化的对象,必须实现Serializable接口。

3、注意:通过源代码发现,Serializable接口只是一个标志接口:
    public interface Serializable {
    }
    这个接口当中什么代码都没有。
    那么它起到一个什么作用呢?
        起到标识的作用,标志的作用,java虚拟机看到这个类实现了这个接口,可能会对这个类进行特殊待遇。
        Serializable这个标志接口是给java虚拟机参考的,java虚拟机看到这个接口之后,会为该类自动生成
        一个序列化版本号。

4、序列化版本号有什么用呢?
    java.io.InvalidClassException:
        com.bjpowernode.java.bean.Student;
        local class incompatible:
            stream classdesc serialVersionUID = -684255398724514298(十年后),
            local class serialVersionUID = -3463447116624555755(十年前)

java语言中是采用什么机制来区分类的?
        第一:首先通过类名进行比对,如果类名不一样,肯定不是同一个类。
        第二:如果类名一样,再怎么进行类的区别?靠序列化版本号进行区分。

小鹏编写了一个类:com.bjpowernode.java.bean.Student implements Serializable
    胡浪编写了一个类:com.bjpowernode.java.bean.Student implements Serializable
    不同的人编写了同一个类,但“这两个类确实不是同一个类”。这个时候序列化版本就起上作用了。
    对于java虚拟机来说,java虚拟机是可以区分开这两个类的,因为这两个类都实现了Serializable接口,
    都有默认的序列化版本号,他们的序列化版本号不一样。所以区分开了。(这是自动生成序列化版本号的好处)

请思考?
        这种自动生成序列化版本号有什么缺陷?
            这种自动生成的序列化版本号缺点是:一旦代码确定之后,不能进行后续的修改,
            因为只要修改,必然会重新编译,此时会生成全新的序列化版本号,这个时候java
            虚拟机会认为这是一个全新的类。(这样就不好了!)

最终结论:
        凡是一个类实现了Serializable接口,建议给该类提供一个固定不变的序列化版本号。
        这样,以后这个类即使代码修改了,但是版本号不变,java虚拟机会认为是同一个类。

*/
public class ObjectOutputStreamTest01 {
    public static void main(String[] args) throws Exception{
        // 创建java对象
        Student s = new Student(1111, "zhangsan");
        // 序列化
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students"));

// 序列化对象
        oos.writeObject(s);

// 刷新
        oos.flush();
        // 关闭
        oos.close();
    }
}

package com.bjpowernode.java.io;import java.io.FileInputStream;
import java.io.ObjectInputStream;/*
反序列化*/
public class ObjectInputStreamTest01 {public static void main(String[] args) throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students"));// 开始反序列化,读Object obj = ois.readObject();// 反序列化回来是一个学生对象,所以会调用学生对象的toString方法。System.out.println(obj);ois.close();}
}

序列化多个对象

package com.bjpowernode.java.io;

import com.bjpowernode.java.bean.User;

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

/*
反序列化集合
 */
public class ObjectInputStreamTest02 {
    public static void main(String[] args) throws Exception{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("users"));
        //Object obj = ois.readObject();
        //System.out.println(obj instanceof List);
        List<User> userList = (List<User>)ois.readObject();
        for(User user : userList){
            System.out.println(user);
        }
        ois.close();
    }
}
当想要一个变量不参加序列化 加入关键字(private transient String name;)表示name不参加序化

序列化(Serialize)相关推荐

  1. php 传递类名,php 对象和数组序列化 serialize()返回字符串方便存储和传递 unserialize()反序列化 不丢失类型和结构...

    现在开发中经常使用序列号和反序列化技术手段,php开发中也大量使用到.如下几个知名系统都使用了大量的序列化技术ecshop 2. phpcms内容管理系统 3.laravel框架 一.序列号的目的? ...

  2. jquery序列化serialize()方法空格变为+问题解决参考方法

    jquery序列化serialize()方法空格变为+问题解决参考方法 参考文章: (1)jquery序列化serialize()方法空格变为+问题解决参考方法 (2)https://www.cnbl ...

  3. mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例

    在写序列化serialize与反序列化unserialize()时,我们先来看看: serialize - 产生一个可存储的值的表示 描述 string serialize ( mixed $valu ...

  4. 关于php序列化serialize字符串结构的说明

    许多php项目中运用序列化serialize字符串存取.解析变量,或者保存到数据库字段中,不是Json格式.XML格式,是一种特有的结构,如果不注意删除的部分字符,就会解析不正确,报错导致程序运行不正 ...

  5. 在线php序列化解析,PHP序列化serialize

    ## PHP序列化serialize ****序列化对象 - 在会话中存放对象 所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示.unserialize()函数 ...

  6. 表单序列化serialize()和serializeArray()的区别以及后台接收

    表单序列化serialize()和serializeArray()的区别以及后台接收 function add() {var data = $("#systemForm").ser ...

  7. 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)

    序列化概述: 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象 ...

  8. form 表单序列化 serialize

    在开发中有时需要在js中提交form表单数据,就需要将form表单进行序列化. jquery提供的serialize方法能够实现. $("#searchForm").seriali ...

  9. select表单序列化serialize()出现问题

    今天在序列化select时,遇到了一个问题 HTML: <input name="id" type="text"/><select class ...

  10. php序列化(serialize)和反序列化(unserialize)函数

    用法:serialize().unserialize() 适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方.这有利于存储或传递 PHP 的值,同时不 ...

最新文章

  1. mysql乐观锁处理超卖_通过乐观锁解决库存超卖的问题
  2. python处理多个excel文件-Python将多个excel文件合并为一个文件
  3. ITK:Levenberg-Marquardt优化
  4. 嗯?原来if可以调用方法的?
  5. WeChall_PHP-0817
  6. java掌握_掌握Java 11的Constantdynamic
  7. sqL编程篇(三) 游标与存储过程
  8. 多级队列调度算法可视化界面_进程调度功能由操作系统内核的进程调度程序完成...
  9. [Node.js] mySQL数据库 -- 英雄管理系统(完善)
  10. Head First 系列书籍分享,Head First Python (中文版·第2版),Head First Java(中文版):第二版——涵盖Java 5.0...
  11. 使用arduino作为programer对新的mcu烧录bootloader
  12. 用Python带大家写个自动生成艺术签名的小工具哟~
  13. Win7系统安装详细教程步骤
  14. 手机怎么调整照片分辨率?照片清晰度dpi怎么调整?
  15. 【特征工程】定性数据的编码
  16. JMeter 图片上传接口进行压力测试
  17. mysql concat最大长度_GROUP_CONCAT()函数最大长度限制
  18. python的truncate()函数
  19. 解决Openwrt安装插件提示一下错误的办法
  20. java zip 字符串_java字符串的压缩解压

热门文章

  1. eclipse如何写python_(怎么用eclipse写python)python eclipse 使用教程
  2. linux之database(数据库)一
  3. Java 实现多继承
  4. 大文件上传控件webupload插件
  5. 常见六大Web安全问题
  6. [C++]稀疏矩阵(一维数组描述)
  7. 成都生物研究所高性能计算服务器,专家人才库数据----中科院成都生物所资源库...
  8. 【读一本书】《昇腾AI处理器架构与编程》--神经网络基本知识学习(1)
  9. 红黑树和红黑树的原理详解
  10. AHB to APB bridge