java基础序--列化和反序列化
一、什么是序列化和反序列化:
序列化:是指把java堆内存中的对象转换成字节(二进制流)的过程。也就是通过某种方式将java对象存储在磁盘内存中,这个过程称为序列化
反序列化:是把磁盘上的对象转恢复成java对象的过程。
二、序列化和反序列化优点:
1、分布式系统中,需要把对象在网络传输,需要将对象转换成二进制流形式,需要共享的javabean对象都需要进行序列化。
2、服务器钝化,服务器发现某些对象好久没有活动,服务器就会将某些对象存储在本地内存中,需要的时候去内存中寻找,然后反序列化成java对象,节省服务器内存。
总结:①、实现了数据的持久化,通过序列化保存在本地硬盘上。②、利用序列化实现了远程通信。
三、序列化的必要条件:
1、需要实现Java.lang.Serializable 接口,java中大多类都实现类改接口。例:String Integer
2、断层会判断,当前对象是 Serializable 的实例,才允许做序列化,Java对象 instanceof Serializable 来判断
3、jdk中的api:
ObjectOutputStream 中的 writeObject() 方法进行序列化操作
ObjectInputStream 中的readObject() 方法进行反序列化操作

javabean 如果不实现 java.io.Serializable 接口

demo:
package com.liuxn.Serialization.javaBean; import java.io.Serializable; /**
* Created by Administrator on 2018/6/13.
* 创建一个javabean 实现 Serializable 接口
*/
public class User implements Serializable { //需要进行序列化的字段
private String name; private int age; transient private String className;//不需要进行序列化的字段 public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public String getClassName() {
return className;
} public void setClassName(String className) {
this.className = className;
} public void setAge(int age) {
this.age = age;
} // public User(String name, int age) {
// this.name = name;
// this.age = age;
// }
//
//
// public User() {
// } @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", className='" + className + '\'' +
'}';
}
}
package com.liuxn.Serialization.test; import com.liuxn.Serialization.javaBean.User; import java.io.*; /**
* Created by Administrator on 2018/6/13.
*
* 用于测试序列化和反序列化 测试类
*/
public class TestSerialization { public static void main(String[] args) {
/**
* 使用ObjectOutputStream实现序列化
*/
User user = new User();
user.setAge(10);
user.setName("小明");
System.out.println(user); ObjectOutputStream oos = null;
try {
OutputStream op = new FileOutputStream("F:\\360WiFi"+ File.separator+"a.txt");
oos = new ObjectOutputStream(op);
oos.writeObject(user);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
/**
* ObjectInputStream 实现反序列化
*/
try {
InputStream in = new FileInputStream("F:\\360WiFi"+ File.separator+"a.txt");
ObjectInputStream os = new ObjectInputStream(in);
byte[] buffer = new byte[10];
int len = -1;
User u = (User) os.readObject();
System.out.println("反序列化:");
System.out.println(u);
os.close();
}catch (Exception e){
e.printStackTrace();
} }
}
//输出结果:
User{name='小明', age=10}
反序列化:User{name='小明', age=10}
在序列化时,如果javabean完成序列化后,修改javabean,在次进行反序列化会出现以下问题:

解决:
在javabean中条添加 serialVersionUID 固定版本。
private static final long serialVersionUID = 1L;
javabean
java基础序--列化和反序列化的更多相关文章
- JAVA基础4---序列化和反序列化深入整理(JDK序列化)
一.什么是序列化和反序列化? 序列化:将对象状态信息转化成可以存储或传输的形式的过程(Java中就是将对象转化成字节序列的过程) 反序列化:从存储文件中恢复对象的过程(Java中就是通过字节序列转化成 ...
- Java基础知识:序列化和反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- java----序列化与反序列化中及java序列化本质就是存储一个对象,然后在其他地方在调用它
Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...
- Java IO---序列化和反序列化
一.序列化和反序列化介绍 什么是序列化和反序列化? 序列化就是将对象转换为字节序列的过程. 反序列化就是将字节序列恢复为对象的过程. 序列化的用途在哪? 通常情况下,序列化有两个用途: 将对象 ...
- SimpleRpc-序列化与反序列化的设计与实现
为什么需要序列化和反序列化? 假设你是客户端,现在要调用远程的加法计算服务,你与服务端商定好了发送数据的格式:发送8个字节的请求,前4字节是第一个数,后4字节是第二个数,服务端读取数据的时候也按照商定 ...
- Java I/O---序列化接口Serializable
1.JDK API 中关于Serializable的描述 public interface Serializable 类通过实现 java.io.Serializable 接口以启用其序列化功能.未实 ...
- JavaSE-序列化和反序列化
什么是序列化,什么时候要进行序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输. 我们在对java对象进行IO流操作 ...
- java--序列化和反序列化
一.序列化 java序列化的过程是把对象转换为字节序列的过程 序列化的两种用途: 1)把对象的字节序列永久保存大搜硬盘上,通常存放到一个文件中 2)在网络上传送对象的字节序列 jdk中的序列化API: ...
- netty6---序列化与反序列化
package com.cn; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ja ...
随机推荐
- fasttext 和pysparnn的安装
- 天池Docker学习赛笔记
容器的基本概念 什么是容器? 容器就是一个视图隔离.资源可限制.独立文件系统的进程集合.所谓"视图隔离"就是能够看到部分进程以及具有独立的主机名等:控制资源使用率则是可以对于内存大 ...
- 反转链表-PHP的实现
<? //节点 class Node { private $Data;//节点数据 private $Next;//下一节点 public function setData($value) { ...
- MapReduce基本认识
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算. 主要由Split.Map.Partition.Sort.Combine(需要自己写).Merge.Reduce组成,一般来 ...
- 去掉input阴影&隐藏滚动条&抛异常&预加载&curl传json
1.隐藏滚动条:-webkit-scrollbar{ display:none; } 2.array_walk():数组里的每个元素执行一个自定义函数: array_map():数组里的每个元素执行一 ...
- influxdb 安装
influxdb是一款开源的时序数据库,可以用作监控系统的数据存储或用来存储基于时序进行分析的业务系统的数据存储. influxdb的部署及使用均比较简单,但是集群(官方版集群已闭源)及高可用方案较少 ...
- python学习19类5之多态与鸭子模型
'''''''''一.多态1.Python中多态是指一类事物有多种形态.''' class Animal: def run(self): raise AttributeError('子类必须实现这个方 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第九周作业
第九周作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个sc ...
- zabbix自动监控钉钉报警
钉钉报警 一:设置钉钉机器人 二:zabbix服务器server端配置 1.修改zabbix_server.conf文件 [root@server ~]# vim /usr/local/zabbix ...
- 小米Note 10 Lite海外发布 无缘中国市场
[TechWeb]5月1日消息,昨日晚间,小米Note 10 Lite在海外亮相.小米市场部副总经理臧智渊在微博透露,小米Note 10 Lite 6GB+64GB版售价349欧元(约合人民币2700 ...