一、什么是序列化和反序列化:

  序列化:是指把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基础序--列化和反序列化的更多相关文章

  1. JAVA基础4---序列化和反序列化深入整理(JDK序列化)

    一.什么是序列化和反序列化? 序列化:将对象状态信息转化成可以存储或传输的形式的过程(Java中就是将对象转化成字节序列的过程) 反序列化:从存储文件中恢复对象的过程(Java中就是通过字节序列转化成 ...

  2. Java基础知识:序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  3. java----序列化与反序列化中及java序列化本质就是存储一个对象,然后在其他地方在调用它

    Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...

  4. Java IO---序列化和反序列化

    一.序列化和反序列化介绍 什么是序列化和反序列化? ​ 序列化就是将对象转换为字节序列的过程. ​ 反序列化就是将字节序列恢复为对象的过程. 序列化的用途在哪? 通常情况下,序列化有两个用途: 将对象 ...

  5. SimpleRpc-序列化与反序列化的设计与实现

    为什么需要序列化和反序列化? 假设你是客户端,现在要调用远程的加法计算服务,你与服务端商定好了发送数据的格式:发送8个字节的请求,前4字节是第一个数,后4字节是第二个数,服务端读取数据的时候也按照商定 ...

  6. Java I/O---序列化接口Serializable

    1.JDK API 中关于Serializable的描述 public interface Serializable 类通过实现 java.io.Serializable 接口以启用其序列化功能.未实 ...

  7. JavaSE-序列化和反序列化

    什么是序列化,什么时候要进行序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输. 我们在对java对象进行IO流操作 ...

  8. java--序列化和反序列化

    一.序列化 java序列化的过程是把对象转换为字节序列的过程 序列化的两种用途: 1)把对象的字节序列永久保存大搜硬盘上,通常存放到一个文件中 2)在网络上传送对象的字节序列 jdk中的序列化API: ...

  9. netty6---序列化与反序列化

    package com.cn; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ja ...

随机推荐

  1. 痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法. 痞子衡最近在深耕i.MXRT1170这颗划时代的 ...

  2. php原生函数应用

    php常见基本的函数 一.字符串函数 implode — 将一个一维数组的值转化为字符串 lcfirst — 使一个字符串的第一个字符小写 ltrim — 删除字符串开头的空白字符(或其他字符) rt ...

  3. qt tableview 选择模式

    QAbstractItemView::SingleSelection QAbstractItemView::ContiguousSelection QAbstractItemView::Extende ...

  4. [Qt]执行cmd命令

    要加 /c 参数 QProcess p; p.start("cmd", QStringList()<<"/c"<<"ping ...

  5. Spring5参考指南:AOP代理

    文章目录 AOP代理 AOP Proxies原理 AOP代理 通常来说Spring AOP有两种代理方式,一种默认的JDK代理,只能代理接口,一种是CGLIB代理,可以代理具体的类对象. Spring ...

  6. SpringBoot应用操作Rabbitmq(direct高级操作)

    一.首先声明完成任务架构,通过direct订阅/发布的模式进行生产消费. a.消息生产指定交换器和路由key b.消费者绑定交换器,路由key和队列的关系(集群监控收到的消息不重复) 二.实战演练 1 ...

  7. Omnicore RPC API中文文档

    2019独角兽企业重金招聘Python工程师标准>>> OmniCore是比特币核心的一个分支,它在比特币协议之上实现了一个新的Omni协议层,用于代币发行.众售等应用,USDT就是 ...

  8. [每日短篇] 1C - Spring Data JPA (0)

    2019独角兽企业重金招聘Python工程师标准>>> 准备把 Spring Data JPA 完整看一遍,顺便把关键要点记录一下.在写这篇文章的今天,再不用 Spring Boot ...

  9. Docker容器利用weave实现跨主机互联

    Docker容器利用weave实现跨主机互联 环境: 实现目的:实现主机A中容器1与主机B中容器1的网络互联 主机A步骤: ①下载复制weave二进制执行文件(需要internet)[root@192 ...

  10. Mbatis逆向工程常遇错误

    org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error may e ...