讲真:序列化必读
序列化是啥啥是序列化为啥要序列化把啥序列化不序列化行不行?问题真多,馒头要一口一口吃问题要一个一个回答。所谓序列化就是格式化,感觉哪不对劲,是约定的格式化,及格了,能够满足正向操作和逆向操作的约定格式化,良好了,能高效稳定满足正向操作和逆向操作的约定格式化,满分了,能提供轻松扩展并高效稳定满足正向操作和逆向操作的约定格式化,耶~恭喜你都会抢答啦。能够支持PHP语言的......,歇菜没你事别瞎掺和。
格式化好理解,标题正中段落开头空两个字段落结束换行这就是格式化,修饰词约定的意思是说你看见这个格式就知道哪个是标题哪个是正文,满足正向操作和逆向操作意思是说能转换过来也必须能丝毫不差原样还原回去,高效好理解一次操作就占一半以上系统开销,数据中一大半是冗余信息估计没人爱用,稳定可靠不能动不动就掉链子,一会儿异常了一会儿解析失败了一会儿又丢数据了。序列化是啥啥是序列化我解释完了,觉得不对的下面就不用看了。
为啥要序列化,一提这茬儿内心满满的委屈一把辛酸泪呀。早年电脑不联网的时候数据都在本地格式化着用,后来联网以后因为硬件和网络等差异,高低字节序主机字节序网络字节序各种问题扑面而来,接着就是各种协议呀标准呀,国际组织特地制定一大套RFC规范,虽然有些规范允许用户通过夹带数据的形式提供扩展,但用起来还是有种种不便。这些年随着云技术发展,对海量数据传输、存储和安全就变的越来越重要,RFC解决的是公有问题,序列化解决的就是私有问题。多年前项目实施中需要跨设备数据传输,Y哥打算把结构体强制类型转换以后扔过来,为这事跟他PK,后来呢没有后来了。其实吧,当时用的是刀片组服务器,无盘的从刀去mount主刀,其实这个方案在当时的确没问题,但以后呢,谁能保证采购的设备都用刀片,谁能保证服务器都是一个品牌一个型号的呢,矮油说出来真是舒服多了。
把啥序列化,废话当然是数据了,还能是鸡蛋灌饼吗。其实数据跟数据还是有差别的,数据类型有n多种编码n多种长短不定必选的单选的多选的,把这些特性要一一恰当地表达出来。
不序列化行不行,行呀,你开心就好!法律规定纳税是公民应尽的义务,又没规定数据必须序列化。
谈谈评判一个序列化工具优劣的标准吧。
首先是效率,包括计算效率和载荷效率两个方面。假设完成一次处理需要耗时一秒钟,序列化和反序列化时间越短则效率越高,不能把时间都耽误在这方面,这些操作对用户来说是不可见的,用户是上帝浪费他们的宝贵时间就是图财害命。网络是按流量计费的,多用多花少用少花不用不花,报文中没用的东西占一半,有效载荷仅仅50%,再压缩也瞎掰,传输花钱存储花钱,过日子要精打细算,吃不穷穿不穷算计不到就受穷,有用的留下没用的统统丢掉。
其次是扩展,约定好的不能老变,今天添点这个明天删点那个简单类型改对象了元素改数组了天天追着屁股后面收拾能不累嘛,开始前把这些潜在的问题都想好,省掉多少麻烦呀,扩展性好不好全仰仗工具本身了,一个优秀的序列化解决方案可以让大家开开心心合作很久,否则就等着被喷吧,内部合作就算了大家碍于情面,外部合作除非你是甲方。某年某月某运营商的某负责人指着当今全球最大的通信设备制造商某产品负责人的鼻子大骂你们还想不想干了,这个场景在十年后的今天依旧记忆犹新,听说最近要“混改”,固网用户大量流失移动用户增长乏力,一手好牌打的这么烂也只能呵呵哒了,不好意思跑题了~
| protobuf | avro | thrift | bson | json | xml | ...... |
计算效率 | 贼快 | 超快 | 特快 | 够快 | 挺快 | 还算快 | 别提了 |
载荷效率 | 贼高 | 贼高 | 也贼高 | 高拉特 | 一般般 | 真一般 | 别瞎比 |
数据类型 | 啥都有 | 全都有 | 真都有 | 够用 | 有缺失 | 不全面 | 都有啥 |
开发周期 | 花雕 | 状元红 | 女儿红 | 加饭 | 一口闷 | 对瓶吹 | 吐一身 |
研发成本 | 不差钱 | 咱有钱 | 哥趁钱 | 这小钱 | 哥没钱 | 真没钱 | 别提钱 |
技术门槛 | 高智商 | 智商高 | 智高商 | 有智商 | 无痴呆 | 向左看 | 向右看 |
综合点评 | 实时业务吐血推荐 | 大数据业务推荐 | 定制业务推荐 | 系统内推荐 | Java体系小快灵推荐 | 前端或配置推荐 | 确定你比人家更出色 |
光说不练假把式光练不说傻把势,上干货。
Protobuf(java版本):http://git.oschina.net/gonglibin/codes/w0ulc5noe2yzi87sx3tbv65
Protobuf(C++版本):http://git.oschina.net/gonglibin/codes/0m3f4vt6yheci57ro2dg196
Avro(C++版本):http://git.oschina.net/gonglibin/codes/qknvpiuzxrdjs582mel4g31
Bson(C++版本):http://git.oschina.net/gonglibin/GlbBson
Json(java版本):http://git.oschina.net/gonglibin/codes/xq3m08arci1d5ksoenyv774
Json(C++版本):http://git.oschina.net/gonglibin/codes/3bk2e5z9w0t8spugi6ayq69
Xml(C++版本):http://git.oschina.net/gonglibin/codes/h5cowfr2tmue0yszv841l29
最后给出一个个人的序列化反序列化实例,该实例是基于KLV可扩展跨平台可加密可压缩支持宽窄字符,受GTP协议启发供企业内部平台应用的解决方案,站在巨人的肩膀上前各位前辈致以崇高的敬意。
最近共享经济火呀,共享与分享一字之差,站在第一人称的角度,共享的可以是属于自己的也可以是属于别人的,分享却只能是属于自己的才会拿出来分给其他人,分享与分赃也是一字之差,分享是高尚的行为,分赃却是肮脏丑陋的罪恶。博客属于自媒体,技术博客不同于八卦博客,是自媒体中的阳春白雪,它可以陶冶人的情操,舒缓人的情绪,助消化助睡眠,缓解女性妊娠期孕吐反应。
要想成为一名优秀的程序猿,靠的是三分技术与七分勤奋,笔耕不辍手脚勤快是这种品质的重要保证,不经历风雨怎能见彩虹没有人能随随便便成功该出手时就出手风风火火闯九州他说风雨中这点痛算什么擦干泪不要问为什么,艾玛差点忘说了,另外还有那九十分靠的是人品。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
把Java的nio坑逐个踩一遍
epoll是个好东西好多地方都在直接或间接的用,nginx用event库用nio用你用我用大家用。LT模式省心ET模式牛掰,处理得当效率那真是杠杠的,C、C++的用法可以参考“项目”通用库https://git.oschina.net/gonglibin/GlbLib-1.0.0中的封装,也可以参考“代码片段”中的用例https://git.oschina.net/gonglibin/codes/kev675liw8unz3j4psft134。由于一个潜在的项目迁移计划导致未来存在基于java技术路线中涉及线程池大并发长(短)连接的业务,所以一个框架就显得特别重要,兵马未动粮草先行。其实不同的业务包含各自不同的应用场景,就通信而言其实差别有时候还是挺大的,同样TCP连接,有的长有的短,有的求多应少,有的求少应多,还有一问一答的,更有一言不合就shutdown的,对底层资源的管理不上心有时候真不行,大半夜没起过夜绝对不算老司机。 说说nio踩过的坑吧,下面列举的仅仅是让发动机托底的大坑,其中崴脚的小坑更是不计其数,首先打开地址https://git.oschina.net/gonglib...
- 下一篇
爬!扒@切#存$构%查
喜欢java主要是喜欢它的简单,一次调用的背后是许多开发者默默的付出,讨厌java主要是讨厌它的简单,一次调用的背后完全不知道系统私下里都干了些啥。计算机技术经历几十年发展,底层的东西日趋完善,后来人在前辈的基础上快速构建,把产品推向市场,反馈迭代再反馈再迭代,变现盈利才是王道。当下有些强业务型互联网企业重融资重逼格,满嘴设计模式数据结构算法大全,闭口不谈运营模式产品形态用户体验~!@#$%^&*()...... 爬是爬虫,网页爬取,爬网页是技术活有难度有挑战,有些站点不喜欢被爬,爬烦了容易被拉黑,有些页面不是静态的,来来回回多步交互才能完成爬取,有些站点需要验证登录,各种形式验证码考验人脑眼手配合更别提机器识别了。 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>fluent-hc</artifactId> <version>4.5.3</version> </dependency> ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16