| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 序列化深入浅出 —— Java版本 -> 正文阅读 |
|
[Java知识库]序列化深入浅出 —— Java版本 |
一、概念&作用将本地已经实例化的某个对象(此对象有参数),有 传输或持久化、重构Java对象 的需求,怎么才能把数据包装到一起? 众所周知,参数指向内存中的地址,这些内存地址存储着实际的数据,这些地址可能并不连续,这就使得在内存中到处都有此对象的参数数据,怎么才能把这些数据全部集合在一起呢?得到集成在一起的数据了,怎么才能把它转化为内存的对象参数呢? 这就需要使用 序列化和反序列化 技术:
序列化常用类型分为 text and binary 两种形式(不常用不列),即 字符串和字节流。
序列化技术,具有 跨语言、跨平台、可扩展和向下兼容 的优点。比如C语言中序列化一个对象后,可以被对应的Java语言解析出来。 二、Java实现序列化数据对象,必须被encoding编码以后才能被序列化(UTF-8等)。下面使用Java分别实现序列化实体类实例为 字节流和文本,文本处以JSON数据格式为例。 1.字节流序列化Java实现序列化注意的点:
以序列化为二进制数据存储到本地为例(字节流序列化实际应用偏向于存储到本地),简单实现: 实体类User
序列化和反序列化操作
现在,就可在当前项目的根目录看到此文件(也可以自己指定位置),打开它(建议使用sublime text或其他编辑器打开): 2.JSON序列化以为JSON序列化,进行打印为例。JSON序列化实际应用偏向于传输数据。这里使用Java类库实现简单Java对象转换为JSON字符串:
输出如下
简单实现肯定是有一些问题,那么为什么我这么敷衍?因为我们可以使用阿里的fastjson类库,使用及其广泛,特别强大!【点击我查看并学习fastjson使用】。 3.二者区别
三、序列化安全1.serialVersionUID针对于二进制序列化 举个例子:在平时我们与人说话交流的时候,大家都用普通话,如果有人使用家乡话,你就会感觉到听不懂了,更别说好好交流了。这里的普通话就是一种协议,作为我们与身边人的语言协议,大家都遵守它才能高效沟通。 而serialVersionUID就是序列化操作的协议,我在解析别人传递给我的数据的时候,会去检查此文件是否遵守协议,遵守我才能正常解析,不遵守我就直接抛出异常(解析也会出现问题)。即反序列化时,JVM会判断serialVersionUID是否一致,不一致就会直接抛出异常。 比如前后使用不同的serialVersionUID: 当我们一个实体类中没有显式的定义一个名为 serialVersionUID、类型为long的变量时,Java序列化机制会根据编译时的class自动生成一个serialVersionUID作为序列化版本比较,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID。时间不同,也会出错。那么如何决呢?便是在本地类中加个serialVersionUID变量,值保持不变,便可以进行序列化和反序列化(显式的定义一个serialVersionUID)。 2.反序列化不安全下面这些地方同样可能存在反序列化安全隐患,但很可能不常被关注到:
治病需要除根,能从根本上阻止反序列化安全问题的防御方案就是完整性校验,而最常见的例子之一就是JWT。 【更多序列化的问题请移步:https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html】。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:55:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |