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 ...
随机推荐
- 上传文件的input问题以及FormData特性
1.input中除了type="file"还要加上name="file",否则$_FILES为空,input的name值就是为了区分每一个input的 2.va ...
- Xtrabackup全量 增量备份详解
xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份 ...
- Ubuntu 修改 hosts 文件
sudo vi /etc/hosts sudo /etc/init.d/networking restart
- 构建密钥验证ssh
1.需要两个虚拟机,每一个创建一个用户登录到用户根下 2.每个用户都要创建密钥对 3.把两个用户的公用密钥用ssh-copy-id -i 命令将公用的密钥复制到另一个用户中 4.在客户端开 ...
- js 实现淘宝放大镜功能,可更改配置参数 带完整版解析代码[magnifier.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写淘宝放大镜效果 基本功能: 运 ...
- IDEA 之 常用快捷键
1. 编辑 No. 快捷键 功能描述 01 Ctrl+Space 补全代码 02 Ctrl+Shift+Space 补全代码,添加分号结束符 03 Ctrl+q 展示某个类或方法的API说明文档 04 ...
- 标准库shelve
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Rancher流水线配置文档
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Rancher流水线从逻辑上可以分为两部分,即CI和CD. CI,可分化为克隆代码.代码打包.发布镜像三部分. CD ...
- POJ Building a Space Station 最小生成树
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15664 Accepted: 6865 Description You ...
- MySQL Windows 环境安装
1.下载 MySQL Windows 安装包 下载地址:https://downloads.mysql.com/archives/installer/ 我这个是 MySQL 5.7 版本 2.直接双击 ...