This commit is contained in:
RedKale
2016-03-02 16:15:59 +08:00
parent ebf08e668f
commit ca97f9a408
3 changed files with 74 additions and 0 deletions

68
article_convert.html Normal file
View File

@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>Redkale(红菜苔)--基于Java 8全新的微服务开源框架 - Redkale官网</title>
<meta name="keywords" content="Redkale,redkale,java,微服务,架构"/>
<meta name="description" content="Redkale(红菜苔)是基于Java 8全新的微服务开源框架"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
</head>
<body>
<section class="page-header">
<a href="index.html" class="project-name">Redkale</a>
<h2 class="project-tagline"></h2>
<a href="redkale.html" class="btn">Redkale 入门</a>
<a href="convert.html" class="btn">Convert 组件</a>
<a href="service.html" class="btn">Service 组件</a>
<a href="source.html" class="btn">Source 组件</a>
<a href="net.html" class="btn">Net 组件</a>
<a href="watch.html" class="btn">Watch 组件</a>
<a href="articles.html" class="btn">技术文章</a>
<a href="code.html" class="btn">Java 源码</a>
</section>
<section class="main-content">
<h3>Redkale 技术详解 03 -- Convert高性能序列化</h3>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/convert.html" target="_blank">Convert</a>是个重复造轮子的组件却是个飞速的轮子。Redkale之所以重复造轮子主要追求性能和需要与网络数据的序列化很好的结合(<a href="/convert.html#json_net_bytebuffer" target="_blank">Convert与ByteBuffer的结合</a>)。 Convert在API设计思路上也与其他同类型的框架不一样配置与序列化方法是分开的大部分场景下配置项是固定的因此不同的配置会动态生成对应的处理类以保证性能。
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从包结构可以看出Convert分三层序列化与反序列化的抽象基础包JSON包、BSON包。即使boolean、int、String这种基础数据类型都不是包含在Convert基础包中。以下是详细的结构图
</p>
<p style="text-align: center;"><img src="images/convertimg_1.png" alt=""/></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从上图可以看出JSON与BSON是Convert基础包的实现主要是实现Reader与Writer类。若需要实现XML格式的序列化可以以JSON为参考自己编写。对于不是内置(ext子包下的数据类型)的且没有自定义处理(Encoder、Decoder)的数据类型, Convert会动态生成ObjectEncoder、ObjectDecoder对象。
</p>
<p>Convert 的性能</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一切不谈性能的框架都是在耍流氓下面以JSON为例与其他主流的JSON框架做个简单的性能比较(测试环境: DELL的普通笔记本)fastjson一直号称是Java性能最好的JSON解析框架其使用Benchmark是 <a href="https://github.com/eishay/jvm-serializers/wiki" target="_blank">https://github.com/eishay/jvm-serializers/wiki</a>Redkale根据该数据编写了<a href="https://github.com/redkale/redkale/tree/master/src/test/java/org/redkale/test/convert/media" target="_blank">MediaContent</a>类。实例由MediaContent.createDefault()方法所得。
</p>
<p style="text-align: center;"><img src="images/convertimg_2.png" alt=""/></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由上图第一份报告看出以MediaContent对象进行比较fastjson的反序列化性能是最好的gson性能最差。redkale、fastjson、jackson在序列化方面差距不大。第二份报告的测试对象是将第一份的MediaContent对象中所有的数值改成负数进行测试的可以看出fastjson对于负数的处理性能很差只是比gson稍强。第三份报告的测试对象是<a href="https://github.com/redkale/redkale/blob/master/src/test/java/org/redkale/test/convert/ConvertRecord.java" target="_blank">ConvertRecord</a>对象该对象的特点是包含int[]、long[]、List、Map数据。从结果可以看出fastjson的反序列化性能最差。redkale与jackson一直保持高性能。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;综合起来看Redkale的Convert性能是最好的。数据相差50毫秒以下的差距基本可以忽略因为每次测试的结果会上下波动几十毫秒。
</p>
<br/>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转载请注明出处:<a href="http://redkale.org/article_convert.html" target="_blank">http://redkale.org/article_convert.html</a>
</p>
<footer class="site-footer">
<span class="site-footer-owner">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;欢迎加入Redkale QQ群: 527523235</span>
</footer>
</section>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?b4e05d7de8b5f3401dd93e3c6b35ffa5";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>