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 ...
随机推荐
- Java构建器(多个构造器参数)
今天看netty权威指南,第一次听说构建器,百度了几个博客,但是并没有通俗易懂一点儿的,综合别人的博客,总结如下: 1. 构建器是什么? 当创建对象需要传入多个参数的时候我们通常会根据参数的数量写不同 ...
- 3.Ubuntu/Deepin下安装Monaco/Menlo字体
前段时间在一家公司实习,让IT给电脑安装了Ubuntu系统,用着挺好,但总感觉字体不太好看,网上小伙伴说Monaco字体不错,所以计划安装试试. 看了好多教程,不得不说,一些教程走下来真心是装不成功, ...
- Hive笔记及配置
Hive 基于Hadoop的数据仓库工具: 将结构化的数据文件,映射为一张表,并提供类SQL查询功能: 本质:将HQL转化为MapReduce程序: Hive处理的数据存储在HDFS: Hive分析数 ...
- 前端自己导出Excel
1.导出当前页面,这是最简单的,只是导出当前页面的数据. exportData(tableid, name) { let table; let uri = 'data:application/vnd. ...
- 解决windows 1903 alt + tab 切换卡顿
右击此电脑图标 选择管理 服务和应用程序 服务 禁用system interface foundation service
- HTML基础之HTML常用标签
下面小编为大家整理一些HTML的常用标签 a.布局标签 div标签定义文档中的分区或节(division/section),可以把文档分割为独立的.不同的部分,主要用于布局. aside标签的内容可用 ...
- web开发常见的鉴权方式
结合网上找的资料整理了一下,以下是web开发中常见的鉴权方法: 预备:一些基本的知识 RBAC(Role-Based Access Control)基于角色的权限访问控制(参考下面①的连接) l ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- eclipse cdt 代码对齐
ctrl + shift + F 快速对齐 平时对小节太不重视了 .
- UML之关系
学习UML我们首先要掌握他们的关系,UML关系可以分为四类,主要有关联.依赖.泛化和实现. 下面我们就一一来详细说明这几种关系. 关联 表示两个类或类与接口之间强烈的依赖关系,关联用直线表示.当然我们 ...