序列化(Serialize)
将内存中的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)相关推荐
- php 传递类名,php 对象和数组序列化 serialize()返回字符串方便存储和传递 unserialize()反序列化 不丢失类型和结构...
现在开发中经常使用序列号和反序列化技术手段,php开发中也大量使用到.如下几个知名系统都使用了大量的序列化技术ecshop 2. phpcms内容管理系统 3.laravel框架 一.序列号的目的? ...
- jquery序列化serialize()方法空格变为+问题解决参考方法
jquery序列化serialize()方法空格变为+问题解决参考方法 参考文章: (1)jquery序列化serialize()方法空格变为+问题解决参考方法 (2)https://www.cnbl ...
- mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例
在写序列化serialize与反序列化unserialize()时,我们先来看看: serialize - 产生一个可存储的值的表示 描述 string serialize ( mixed $valu ...
- 关于php序列化serialize字符串结构的说明
许多php项目中运用序列化serialize字符串存取.解析变量,或者保存到数据库字段中,不是Json格式.XML格式,是一种特有的结构,如果不注意删除的部分字符,就会解析不正确,报错导致程序运行不正 ...
- 在线php序列化解析,PHP序列化serialize
## PHP序列化serialize ****序列化对象 - 在会话中存放对象 所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示.unserialize()函数 ...
- 表单序列化serialize()和serializeArray()的区别以及后台接收
表单序列化serialize()和serializeArray()的区别以及后台接收 function add() {var data = $("#systemForm").ser ...
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)
序列化概述: 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象 ...
- form 表单序列化 serialize
在开发中有时需要在js中提交form表单数据,就需要将form表单进行序列化. jquery提供的serialize方法能够实现. $("#searchForm").seriali ...
- select表单序列化serialize()出现问题
今天在序列化select时,遇到了一个问题 HTML: <input name="id" type="text"/><select class ...
- php序列化(serialize)和反序列化(unserialize)函数
用法:serialize().unserialize() 适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方.这有利于存储或传递 PHP 的值,同时不 ...
最新文章
- mysql乐观锁处理超卖_通过乐观锁解决库存超卖的问题
- python处理多个excel文件-Python将多个excel文件合并为一个文件
- ITK:Levenberg-Marquardt优化
- 嗯?原来if可以调用方法的?
- WeChall_PHP-0817
- java掌握_掌握Java 11的Constantdynamic
- sqL编程篇(三) 游标与存储过程
- 多级队列调度算法可视化界面_进程调度功能由操作系统内核的进程调度程序完成...
- [Node.js] mySQL数据库 -- 英雄管理系统(完善)
- Head First 系列书籍分享,Head First Python (中文版·第2版),Head First Java(中文版):第二版——涵盖Java 5.0...
- 使用arduino作为programer对新的mcu烧录bootloader
- 用Python带大家写个自动生成艺术签名的小工具哟~
- Win7系统安装详细教程步骤
- 手机怎么调整照片分辨率?照片清晰度dpi怎么调整?
- 【特征工程】定性数据的编码
- JMeter 图片上传接口进行压力测试
- mysql concat最大长度_GROUP_CONCAT()函数最大长度限制
- python的truncate()函数
- 解决Openwrt安装插件提示一下错误的办法
- java zip 字符串_java字符串的压缩解压
热门文章
- eclipse如何写python_(怎么用eclipse写python)python eclipse 使用教程
- linux之database(数据库)一
- Java 实现多继承
- 大文件上传控件webupload插件
- 常见六大Web安全问题
- [C++]稀疏矩阵(一维数组描述)
- 成都生物研究所高性能计算服务器,专家人才库数据----中科院成都生物所资源库...
- 【读一本书】《昇腾AI处理器架构与编程》--神经网络基本知识学习(1)
- 红黑树和红黑树的原理详解
- AHB to APB bridge