概念

序列化:将java对象转换为字节序列的过程叫做序列化

反序列化:将字节对象转换为java对象的过程叫做反序列化

解决的问题

1.序列化时间

2.反序列化时间

3.bytes大小

4.操作方便  支持的数据类型和应用传输数据的格式是否恰当

例举几种方式序列化的方式:有一篇很好的文章http://www.iteye.com/topic/1128868

说白了就是只有编码后的包小,才能传的快,只有解码的时候效率高,才能使协议处理的效率高

选用什么的编解码协议,我觉得要本着易用,效率高为原则,

比如protobuff,优点:字节数很小,适合网络传输节省io,跨语言 。缺点:需要依赖于工具生成代码,不易用

编码可以用jprotobuff这个中间件,很方便,可解码就悲剧了,很麻烦,另外对于复杂的数据类型,也不好处理

java 自带的

优点:java原生支持,不需要提供第三方的类库,使用比较简单。缺点:无法跨语言,字节数占用比较大,某些情况下对于对象属性的变化比较敏感。

json

Json的优点:明文结构一目了然,可以跨语言,属性的增加减少对解析端影响较小。缺点:字节数过多,依赖于不同的第三方类库。

amf3 比较适合大数据传输,另外压缩比很高,适用于slg类型的后台计算,前台展示的游戏,另外Object和array于java的互转比较省事

列出我项目用到的java和amf3解码的代码

      public void amf3Decode(ProtocolDecoderOutput out, byte[] bytes,
boolean compressed) throws Exception { int len = bytes.length; ByteArrayInputStream bios = new ByteArrayInputStream(bytes, 0, len); Amf3Input amf3in = null;
try {
amf3in = new Amf3Input(context);
if (compressed) {
amf3in.setInputStream(new GZIPInputStream(bios));
} else {
amf3in.setInputStream(bios);
}
Object message = amf3in.readObject();
if (message != null) {
out.write(message);
} } finally {
if (amf3in != null) {
amf3in.close();
}
} } public void javaDecode(ProtocolDecoderOutput out, byte[] bytes,
boolean compressed) throws Exception {
int len = bytes.length; ByteArrayInputStream bios = new ByteArrayInputStream(bytes, 0, len); ObjectInputStream ois = null; try {
if (compressed) {
ois = new ObjectInputStream(new InflaterInputStream(bios));
} else {
ois = new ObjectInputStream(bios);
}
Object message = ois.readObject();
if (message != null) {
out.write(message);
} } finally {
if (ois != null) {
ois.close();
}
} // in.close(); }

  

  列出我项目中java和amf3编码的代码

    protected void getAmf3Bytes(IoBuffer buffer, Object message)
throws Exception {
Amf3Output amf3out = null;
try {
amf3out = new Amf3Output(context);
amf3out.setOutputStream(new IoBufferOutputStream(buffer));
amf3out.writeObject(message);
amf3out.flush();
} finally {
if (amf3out != null) {
amf3out.close();
}
}
} protected void getJavaBytes(IoBuffer buffer, Object message)
throws Exception {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new IoBufferOutputStream(buffer));
oos.writeObject(message);
oos.flush();
} finally {
if (oos != null) {
oos.close();
}
}
}

  

【MINA】序列化和反序列化我们要考虑的问题的更多相关文章

  1. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  2. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  3. Java 序列化与反序列化

    1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...

  4. C#中怎样实现序列化和反序列化

    我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的 因为我们如果想要将一个对象持久化到文件中 如 ...

  5. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  6. XPatchLib 对象增量数据序列化及反序列化器 For .Net

    在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...

  7. c# Json 自定义类作为字典键时,序列化和反序列化的处理方法

    一般情况下,Newtonsoft.Json.dll 对 Dictionary<int,object>.Dictionary<string,object>等序列化与反序列化都是成 ...

  8. java 对象序列化与反序列化

    Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为 ...

  9. 序列化,反序列化和transient关键字

    一.序列化和反序列化的概念 序列化:指把java对象转换为字节序列的过程. 反序列化:指把字节序列恢复为java对象的过程. 对象的序列化主要有两种用途: 1) 把对象的字节序列保存到硬盘上,通常存放 ...

  10. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...

随机推荐

  1. 家庭局域网接入Internet

     接入Internet  建立宽带连接 步骤一:单击"网络",再属性 步骤二:单击"更改适配器设置" 步骤三:选择"宽带连接" 步骤四:输入 ...

  2. Hadoop,HBase,Zookeeper源码编译并导入eclipse

    基本理念:尽可能的参考官方英文文档 Hadoop:  http://wiki.apache.org/hadoop/FrontPage HBase:  http://hbase.apache.org/b ...

  3. 系统时间不一致导致memcached的session不共享

    测试服务器需要做负载均衡,采用的是Nginx+Tomcat. 负载均衡配置成功之后,采用memcached配置session同步.总共4台服务器,三台服务器很顺利的配置成功,最后一台服务器死活不能共享 ...

  4. Keil Mdk5.0 破解包 和谐包【worldsing笔记】

    有关Keil MDK 5.0的介绍和下载 http://www.cnblogs.com/worldsing/p/3355911.html 下载地址 点击下载:http://pan.baidu.com/ ...

  5. BootStrap导航栏的使用

    默认的导航栏 创建一个默认的导航栏的步骤如下: 向 <nav> 标签添加 class .navbar..navbar-default. 向上面的元素添加 role="naviga ...

  6. 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵

    如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...

  7. 网站WAF的检测

    [wafw00f]: 项目地址: https://github.com/sandrogauci/wafw00f WAFW00F是识别和指纹Web应用防火墙(WAF)产品,其工作原理是首先通过发送一个正 ...

  8. 文件和目录之access函数

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 当用open函数打开一个文件时,内核以进程的有 ...

  9. 用linq实现登陆功能

    BLL层的逻辑代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; name ...

  10. C#_MVC3之使用Authorize简单的验证登录(一)

    第一步,自定义 AuthorizeAttribute. public class CustomAuthorizeAttribute : AuthorizeAttribute { public over ...