java为什么序列化_什么是Java序列化、为什么要序列化、JAVA序列化有哪些方式(性能由低至高)...
先普及一下,计算机中无法识别一个基本单元【字节】来表示,必须经过“翻译”才能让计算机理解人类的语言,这个翻译过程就是【编码】,通常所说的字符转换为字节。 有I/O的地方机就会涉及编码,现在几乎所有的应用程序都涉及网络I/O和磁盘I/O,而数据传输时都是以字节为单位的,所以所有的数据都必须能够序列化为字节。
什么是Java序列化?
简单来说 序列化就是把Java对象储存在某一地方(硬盘、网络),也就是将对象的内容进行流化。
反序列化:就是把二进制数据反序列化成对象数据
为什么要序列化?
方便于传输、存储(内存中的对象状态保存到一个文件中或者数据库中;套接字在网络上传送对象;RMI)。
JAVA序列化有哪些方式(性能由低至高)
Java Serialization(主要是采用JDK自带的Java序列化实现,性能很不理想)
Json(目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库)
FastJson(阿里的fastjson库)
Hession(它基于HTTP协议传输,使用Hessian二进制序列化,对于数据包比较大的情况比较友好。)
Dubbo Serialization(阿里dubbo序列化)
FST(高性能、序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右)
Kryo
重点说下 FST的用法——>开源中国:http://www.oschina.net/p/fst
de.ruedigermoeller
fst
2.04
// ! reuse this Object, it caches metadata. Performance degrades massively
// if you create a new Configuration Object with each serialization !
static FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration();
...
public MyClass myreadMethod(InputStream stream) throws IOException, ClassNotFoundException
{
FSTObjectInput in = conf.getObjectInput(stream);
MyClass result = in.readObject(MyClass.class);
// DON'T: in.close(); here prevents reuse and will result in an exception
stream.close();
return result;
}
public void mywriteMethod( OutputStream stream, MyClass toWrite ) throws IOException
{
FSTObjectOutput out = conf.getObjectOutput(stream);
out.writeObject( toWrite, MyClass.class );
// DON'T out.close() when using factory method;
out.flush();
stream.close();
}
java为什么序列化_什么是Java序列化、为什么要序列化、JAVA序列化有哪些方式(性能由低至高)...相关推荐
- java面试题_阿里大厂流出的数百道 Java 经典面试题
BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...
- java 实现超时_如何实现带有超时的Runnable? - java
我目前有一个相当简单的SSL服务器/客户端项目,其中涉及标准Java后端和Android前端.与客户端发送数据后,我想尝试从服务器读取响应.但是,我遇到了一个小问题.服务器并不总是响应,因此我不得不以 ...
- java循环输入_【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)...
[新手友好型视频+图文] 全面讲解Java一维数组(内含带答案和讲解的练习题彩蛋喔) 看完即上手!更有详解版练习题来帮你加深印象~~ 一.视频讲解 一维数组详解https://www.zhihu.co ...
- java jni编译_从源码编译Android系统的Java类库和JNI动态库的方法
利用源码编译Android系统Java类库 1.编写Java项目和Android.mk文件 ├── Android.mk └── src └── com └── lhw └── framework └ ...
- java内置_自包含的应用程序,内置Java
我已经看过几篇在Java 9中简要提到自包含应用程序的在线演示文稿,但我有一个问题需要我解决. 使用新模块系统,您现在只允许包含运行应用程序所需的最少代码.但是,希望运行应用程序的系统是否仍需要JRE ...
- java ui调试_如何使用 IBM i System Debugger 调试 Java 程序
当在 IBM i 上使用 Java 时,您可以使用 Qshell Interpreter 或者 CL 命令提供的 Java tools,在 Qshell 环境和 IBM i 环境上进行与 Java 开 ...
- java idea 模块_使用IntelliJ IDEA搭建多maven模块JAVA项目
一.新建项目和模块 步骤: 1. 新建一个项目,因为maven管理jar包非常方便,故此处建立一个maven项目:New Project->Maven->(Create from arch ...
- java项目教训_[免费电子书]分析超过600,000个Java项目的经验教训
java项目教训 建立明智的错误处理工作流程需要什么? 调查和解决生产中的应用程序错误对于维持性能和可靠性至关重要. 但是,这并不意味着要花很多时间. 要理解为什么在生产中的故障排除,可这样的头痛,我 ...
- java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势
java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...
- java 堆栈信息_每天学习一个命令:jstack 打印 Java 进程堆栈信息
Jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息. 这里需要注意的是 Java 8 引入了 Java Mission Control, ...
最新文章
- 信息化建设工程的有效成本及定价分析(1)
- 图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
- Adam公式+参数解析
- 爱上经典之《蜗牛与黄鹂鸟》
- QT学习:数据库基本概念
- DevOps和SRE有什么不同,每个意味着什么
- 基于java的络教学平台的设计与实现 (含源文件)
- h5键盘把页面顶走了_微信h5开发的坑
- 怎么把pdf的背景去掉_PDF试卷有页眉还有水印,打印出来一片花,怎么办?
- vscode输入特殊符号
- 二进制数与十六进制数之间如何互相转换
- java斗地主发牌教学,命令行版的斗地主你玩过没?
- UltraISO下载安装方式
- 请广大编程爱好者加入QQ群5907439
- 尹会生python课程_百家姓之尹姓氏起源、来历
- 有了这份攻略,再也不怕数据分析面试了!
- 基于JQuery实现鼠标滑过(类似hover)图片(或Canvas),实时获取鼠标坐标位置
- 大学高校供配电系统谐波危害及治理方案
- 电信网关改造无线打印服务器,天翼网关2.0华为HS8145v5改华为界面改双模教程(转别人的)个人总结...
- 计算机主机房的消防配置,计算机机房火灾报警及消防设施要求