JAVA基础知识|Serializable
一、序列化和反序列化
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
将内存中对象的信息保存下来,可以有很多种方式实现这一功能。其中java提供了一种更好的保存对象状态的机制,那就是序列化。
应用场景:
- 把内存中的对象状态保存到一个文件或者数据库中的时候;
- 在网络上传送对象的时候;
- 其他(以后再补充)
二、实例
import java.io.Serializable; /**
* Created by jyy on 2018/6/4.
*/
public class Cat implements Serializable { public Cat(String id, String name) {
this.id = id;
this.name = name;
} private String id;
private String name;
public static String call = "喵喵喵"; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Cat{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", call='" + call + '\'' +
'}';
}
}
import java.io.*; /**
* Created by jyy on 2018/4/19.
*/
public class Test { public static void main(String[] args){ Cat cat = new Cat("1001","Tom");
serialize(cat);
deserialize(); Cat.call = "喵";
deserialize();
} /**
* 序列化
*/
public static void serialize(Cat cat){ ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(new File("D:/other/cat.txt")));
oos.writeObject(cat);
System.out.println("序列化成功:"+cat);
}catch(IOException e){
System.out.println("Cat 对象序列化失败!");
}finally{
try {
oos.close();
}catch(IOException e){
System.out.println("输出流关闭失败!");
}
}
} /**
* 反序列化
*/
public static void deserialize(){ ObjectInputStream ois;
try {
ois = new ObjectInputStream(new FileInputStream(new File("D:/other/cat.txt")));
Cat cat1 = (Cat)ois.readObject();
System.out.println("反序列化成功:"+cat1);
}catch (Exception e){
System.out.println("Cat 对象反序列化失败!");
}
}
}
执行结果:
序列化成功:Cat{id='1001', name='Tom', call='喵喵喵'}
反序列化成功:Cat{id='1001', name='Tom', call='喵喵喵'}
反序列化成功:Cat{id='1001', name='Tom', call='喵'}
对象中非静态的成员变量“id”,“name”可以被序列化。但是静态成员变量“call”,不可以被序列化,因为它是属于类信息的一部分,而不属于对象。
如果某一成员变量不想被序列化,可以使用关键字“transient”进行修饰。
三、serialVersionUID
将序列化后的对象进行网络传输时,serialVersionUID将必不可少。
例如在客户端A中Cat类的serialVersionUID=1L,而在客户端B中Cat类的serialVersionUID=2L,那么就不能反序列化这个对象。
serialVersionUID有两种生成策略:
- 一个是固定的 1L;
- 一个是随机生成不重复的 long 类型数据(实际上是使用JDK工具根据类名、接口名、成员方法及属性等来生成);
JAVA基础知识|Serializable的更多相关文章
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
随机推荐
- 【转载】 C#中使用Sum方法对List集合进行求和操作
在C#的List操作中,有时候我们需要对List集合对象的某个属性进行求和操作,此时可以使用Lambda表达式中的Sum方法来快速实现此求和操作,使用Sum方法可使代码简洁易读,并且省去写for循环或 ...
- 关于 table 那些事儿
一. table thead/tbody/tfoot 组合写法: table: 表格: thead: 表头: tbody: 标签表格主体(正文): tr:行: th:表头单元格 td:单元格: tb ...
- ORA-00001:unique constraint violated解决
转自:https://www.2cto.com/database/201211/172340.html ORA-00001:unique constraint violated解决 今天往数据库中插入 ...
- 【坑】select2 模态框中下拉input无法focus
select2的组件bug 解决方案: 在bootstrap.js中修改: Modal.prototype.enforceFocus = function () { $(document) .off( ...
- 对于Linux中文件描述符的疑问以及解决
问题 每次web服务器或者是几乎所有Linux服务器都需要对文件描述符进行调整,我使用ulimit -n来查看当前用户的最多能打开的文件,默认设置的是1024个,但是系统运行起来以及开启一些简单的 ...
- Linux 之 用户、用户组以及权限
拥有者(user),拥有组(group),其他人(other) 由于Linux是一个多人多任务的系统,因此经常会出现同一台机器同时有多个人进行操作,为了考虑每个人的隐私权以及每个人喜好的工作环境,所以 ...
- 四:MySQL系列之Python交互(四)
该篇主要介绍MySQL数据库的分表.以及与Python的交互的基本操作等. 一.拆分表操作 1.1 准备工作 创建数据库 --> 使用数据库 --> 创建数据表 --- 添加记录 -- ...
- unittest 运行slenium(三)---通过数据驱动形式运行用例
一: 获取数据 获取用例所在位置,通过OpenExcelPandas来读取用例里面的全部数据.通过某个列名来创建新的序号. 并将结果转换成list类型,将其作为ddt数据的来源. 1. 在test文 ...
- 13. 请看TED 的演讲, 谈谈你对压力的看法,以及怎么和别人合作, 帮助别人,把压力转化为动力,在互相帮助的环境中成长。------------答题者:徐潇瑞
看了ted的演讲,我觉得压力就像一根弹簧,有多大的压力,它就有多大的弹力:现实中只要你学会用一种永远不服输的顽强精神,去对待人生和社会中遇到的一切困难与挫折,宠辱不惊的看云卷云舒,悟潮起潮落.可是存在 ...
- Stages — 研发过程可视化建模和管理平台
Stages 是德国Method park公司的产品,用于帮助企业定义.管理.发布.控制.优化其研发过程,同时使其研发过程符合CMMI.ASPICE.ISO26262等标准.Stages的核心理念是把 ...