文档章节

Java序列化之Serializable

村长大神
 村长大神
发布于 05/08 10:03
字数 676
阅读 13
收藏 7

1.需求

        1.什么是Java序列化

2.详解

         1.序列化  理解为"打碎"即可

          2.在书本上序列化的意思是将Java对象转为二进制

          3.java平台允许我们在内存中创建对象,当JVM运行时对象才能存在,如果JVM停止,对象消失 

 如果我们需要Java对象在JVM停止后,能够保存对象,并且在将来能读取保存的对象,这是需要序列化

3.使用Java序列化

        使用Java对象序列化时,会将对象保存为一组字节,对象序列化保存的时对象状态,就是对象的成员变量

对象序列化不会关注类中的静态变量

4.举个栗子

创建一个User类,用于序列化及反序列化

public class User implements Serializable {

    private static final long serialVersionUID = -6849794470754667710L;
    

    private String name;

    private Integer age;

    private transient String gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

 

序列化和反序列化

public class Client {

    @Test
    public void serializable() throws Exception {
        User user = new User();
        user.setName("hollis");
        user.setAge(23);
        user.setGender("man");
        System.out.println(user);
        //Write Obj to File
        ObjectOutputStream oos = null;
        oos = new ObjectOutputStream(new FileOutputStream("temp"));
        oos.writeObject(user);
        oos.close();
    }

    @Test
    public void unSerializable() throws Exception {
        ObjectInputStream ois= new ObjectInputStream(new FileInputStream(new File("temp")));
        User newUser = (User) ois.readObject();
        System.out.println(newUser);
        ois.close();
    }

}

5. 注意

1、在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。

2、通过ObjectOutputStreamObjectInputStream对对象进行序列化及反序列化

3、虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID

4、序列化并不保存静态变量。

5、要想将父类对象也序列化,就需要让父类也实现Serializable 接口。

6、Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。

7、服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的,比如密码字符串等,希望对该密码字段在序列化时,进行加密,而客户端如果拥有解密的密钥,只有在客户端进行反序列化时,才可以对密码进行读取,这样可以一定程度保证序列化对象的数据安全。

© 著作权归作者所有

共有 人打赏支持
村长大神
粉丝 163
博文 876
码字总数 904789
作品 0
杭州
程序员
Android Serializable与Parcelable原理与区别

一、序列化、反序列化是什么? (1) 名词解释 对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。 对象的反序列化:把字节序列恢复为Java对象的过程。 (2) 序列化详细解释 ...

KingMing
2015/04/16
0
0
(1)java序列化--java.io.Serializable接口解析

(PS:本文为作者原著,如需转载,请注明出处-_^) 使用java以来,序列化随处可见,至于为什么要用序列化、序列化能解决什么问题,作为一个普通的码农,一般不怎么会去深入研究,由于最近在看...

sumekey
2011/09/07
0
0
serialVersionUID作用

Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较...

stefanzhlg
2015/03/23
0
0
hibernate 对象为什么需要实现 Serializable接口

注意区分持久化和序列化,持久化是把对象中的信息转换为数据库中的表来存储;序列化是将对象(java对象)直接变成字符串等流,存储到硬盘上,不涉及数据库表。 序列化的目的主要是方便直接传...

柠檬的橘子
2017/03/16
0
0
Java Serializable(序列化)的理解

1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object st...

LCZ777
2014/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

正弦 余弦 角度 用于画时钟

<html> <head> <title>时钟</title> </head> <style> #canvas{ background: #1977ca } </style>......

一箭落旄头
21分钟前
1
0
drupal7自定义模块之表单(新手向)

前段时间要给网站做个高级搜索的功能,但drupal7自带的搜索远远无法满足需求,便有了自己开发的需求 我以前没有接触过drupal,做这个功能也是困难重重,几乎是从零开始,我将目光放到了自定义模块...

gcudwork
26分钟前
0
0
驰狼课堂

http://www.chilangedu.com/

求是科技
44分钟前
0
0
jumpserver 报错"Incorrect string value

申明 本文所有内容参考自jumpserver记录命令无法入库问题 #1773 简介 jumpserver 1.4.0在jumpserver.log中大量报错,错误日志 File "/opt/jumpserver/apps/terminal/api.py", line 246, i...

zhnxin
50分钟前
2
0
用户管理相关配置文件及命令

9月19日任务 2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 扩展知识 实用小工具 简单命令行下实现Linux/Windows文件互传 前提:使用远程工具Xsh...

robertt15
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部