先普及一下,计算机中无法识别一个基本单元【字节】来表示,必须经过“翻译”才能让计算机理解人类的语言,这个翻译过程就是【编码】,通常所说的字符转换为字节。  有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序列化有哪些方式(性能由低至高)...相关推荐

  1. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  2. java 实现超时_如何实现带有超时的Runnable? - java

    我目前有一个相当简单的SSL服务器/客户端项目,其中涉及标准Java后端和Android前端.与客户端发送数据后,我想尝试从服务器读取响应.但是,我遇到了一个小问题.服务器并不总是响应,因此我不得不以 ...

  3. java循环输入_【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)...

    [新手友好型视频+图文] 全面讲解Java一维数组(内含带答案和讲解的练习题彩蛋喔) 看完即上手!更有详解版练习题来帮你加深印象~~ 一.视频讲解 一维数组详解https://www.zhihu.co ...

  4. java jni编译_从源码编译Android系统的Java类库和JNI动态库的方法

    利用源码编译Android系统Java类库 1.编写Java项目和Android.mk文件 ├── Android.mk └── src └── com └── lhw └── framework └ ...

  5. java内置_自包含的应用程序,内置Java

    我已经看过几篇在Java 9中简要提到自包含应用程序的在线演示文稿,但我有一个问题需要我解决. 使用新模块系统,您现在只允许包含运行应用程序所需的最少代码.但是,希望运行应用程序的系统是否仍需要JRE ...

  6. java ui调试_如何使用 IBM i System Debugger 调试 Java 程序

    当在 IBM i 上使用 Java 时,您可以使用 Qshell Interpreter 或者 CL 命令提供的 Java tools,在 Qshell 环境和 IBM i 环境上进行与 Java 开 ...

  7. java idea 模块_使用IntelliJ IDEA搭建多maven模块JAVA项目

    一.新建项目和模块 步骤: 1. 新建一个项目,因为maven管理jar包非常方便,故此处建立一个maven项目:New Project->Maven->(Create from arch ...

  8. java项目教训_[免费电子书]分析超过600,000个Java项目的经验教训

    java项目教训 建立明智的错误处理工作流程需要什么? 调查和解决生产中的应用程序错误对于维持性能和可靠性至关重要. 但是,这并不意味着要花很多时间. 要理解为什么在生产中的故障排除,可这样的头痛,我 ...

  9. java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势

    java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...

  10. java 堆栈信息_每天学习一个命令:jstack 打印 Java 进程堆栈信息

    Jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息. 这里需要注意的是 Java 8 引入了 Java Mission Control, ...

最新文章

  1. 信息化建设工程的有效成本及定价分析(1)
  2. 图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
  3. Adam公式+参数解析
  4. 爱上经典之《蜗牛与黄鹂鸟》
  5. QT学习:数据库基本概念
  6. DevOps和SRE有什么不同,每个意味着什么
  7. 基于java的络教学平台的设计与实现 (含源文件)
  8. h5键盘把页面顶走了_微信h5开发的坑
  9. 怎么把pdf的背景去掉_PDF试卷有页眉还有水印,打印出来一片花,怎么办?
  10. vscode输入特殊符号
  11. 二进制数与十六进制数之间如何互相转换
  12. java斗地主发牌教学,命令行版的斗地主你玩过没?
  13. UltraISO下载安装方式
  14. 请广大编程爱好者加入QQ群5907439
  15. 尹会生python课程_百家姓之尹姓氏起源、来历
  16. 有了这份攻略,再也不怕数据分析面试了!
  17. 基于JQuery实现鼠标滑过(类似hover)图片(或Canvas),实时获取鼠标坐标位置
  18. 大学高校供配电系统谐波危害及治理方案
  19. 电信网关改造无线打印服务器,天翼网关2.0华为HS8145v5改华为界面改双模教程(转别人的)个人总结...
  20. 计算机主机房的消防配置,计算机机房火灾报警及消防设施要求

热门文章

  1. [leetcode]Two Sum @ Python
  2. 洛谷P3642 [APIO2016]烟火表演
  3. linux系统学习第二天
  4. CentOS 6.7 配置JSP运行环境之resin
  5. 发布一个 host 管理插件
  6. MariaDB忘记root密码
  7. Guava库学习:学习Concurrency(二)Monitor_2
  8. 网络收包流程-网络层处理流程ip_rcv(五)
  9. Androd UI学习之ImageSwitcher
  10. 内核如何检测soft lockup与hard lockup?