分析了BasicSerializer和JavaSerializer,剩下的序列化类就比较简单了,其实最本质的是基本类型的序列化
http://diaocow.iteye.com/blog/1317164,其他任何类型的序列化最后都可以回归到基本类型的序列化;
隐隐的感觉透着递归的理念,最后递归到一个基本问题的解决!
今天我们分析下CollectionSerializer和MapSerializer(参考源码版本3.0.13)。
1.CollectionSerializer
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException
{
Collection list = (Collection) obj;
Class cl = obj.getClass();
boolean hasEnd;
// 输出集合头,格式:'Vt' [类型名] ['l'集合大小] 并且总是返回true
if (cl.equals(ArrayList.class) || ! _sendJavaType)
hasEnd = out.writeListBegin(list.size(), null);
else
hasEnd = out.writeListBegin(list.size(), obj.getClass().getName());
// 循环序列化每一个集合元素
Iterator iter = list.iterator();
while (iter.hasNext()) {
Object value = iter.next();
// 若不清楚这里面做了什么,请看Hessian源码学习(三)
out.writeObject(value);
}
// 输出结束标记'z'
if (hasEnd)
out.writeListEnd();
}
2.MapSerializer
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException
{
if (out.addRef(obj))
return;
Map map = (Map) obj;
Class cl = obj.getClass();
// 输出Map头,格式:'Mt'[类型名]
if (cl.equals(HashMap.class))
out.writeMapBegin(null);
else
out.writeMapBegin(obj.getClass().getName());
// 循环序列化每一个键值对
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
// 分别序列化键、值 (若不清楚这里面做了什么,请看Hessian源码学习(三))
out.writeObject(entry.getKey());
out.writeObject(entry.getValue());
}
// 输出结束标记'z'
out.writeMapEnd();
}
是不是很简单,我们以一个例子作为文章的结束:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("key1", 100);
map.put("key2", 200);
map.put("key3", 300);
OutputStream os = new FileOutputStream("hessianOutput");
AbstractHessianOutput out = new HessianOutput(os);
out.setSerializerFactory(new SerializerFactory());
out.writeObject(map);
总结
通过JavaSerializer, CollectionSerializer, MapSerializer我们可以看出,任何类型的序列化都可以回归到基本类型的序列化;
- 大小: 51.2 KB
分享到:
相关推荐
公司搞soa治理,正好采用hessian的export暴露接口,我修改了下,客户端不需要采用url,直接采用servicename,从zookeeper取地址列表。客户端和服务端通过mina通讯,不采用原生的http协议。目前mina的编码解码还有待...
这个压缩包包含了Hessian的多个版本,分别是Hessian3.1.6、Hessian3.2.1以及Hessian4.0.7。每个版本都有其特定的功能改进和优化,了解这些版本的区别和适用场景对于开发者来说至关重要。 Hessian3.1.6是Hessian的一...
《Hessian源码分析与Hack:携带远程调用端信息》 Hessian作为一种轻量级的RPC(远程过程调用)框架,因其高效、简洁的二进制协议,被广泛应用于构建Web服务。然而,在实际应用中,有时我们需要获取到远程调用端的IP...
这个"**Hessian源码示例**"很可能包含了使用HessianCSharp库在C#环境中实现服务端和客户端通信的示例代码。HessianCSharp是.NET平台上的一个开源库,它实现了Hessian协议,使得开发者可以方便地在.NET应用程序之间...
通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Java中,如果一个类实现了Serializable接口,那么该类...
Hessian学习笔记 Hessian是一种基于Binary-RPC协议实现的远程通讯library,由Caucho提供。下面是Hessian的学习笔记: 一、简介 Hessian是基于Binary-RPC协议实现的远程通讯library,用于实现远程过程调用(RPC)...
hessian源码
至于标签"源码",学习Hessian时查看源码有助于理解其内部工作原理,比如数据如何被编码和解码。你可以通过阅读开源的Hessian库,如Caucho Hessian的Java实现,来了解其底层细节。 至于"工具",有一些工具可以帮助...
在android与web端实现hessian通信,源码为android客户端源码,jar包来自http://hsrong.iteye.com/blog/1719996,google官网提供的hessdroid不可用,因为里面包含一些android不支持的类;hessian官网的jar包适用于web...
hessian-3.2.0源码,在做分布式交互时,可能要重写hessian
源码也使得开发者能够根据需要修改或扩展Hessian的功能,例如添加新的序列化策略,或者优化特定场景下的性能。 Hessian在实际应用中,通常被用来构建RPC(Remote Procedure Call)框架,使得服务端的方法可以直接在...
Hessian是一种二进制协议,它被设计用于提高远程调用的...通过学习和实践这个Hessian demo,你将能够更好地应对涉及远程调用和数据交换的问题。无论是Java开发者还是C++开发者,Hessian都是值得了解和掌握的一项技术。
在博客链接《iteye博客:550771》中,作者可能详细讨论了Hessian的使用方法、优缺点以及实战案例,可以作为学习Hessian的参考资料。 **六、Hessian的使用场景** 1. **微服务通信**:在微服务架构中,Hessian可以...
这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...
在这个“hessian学习实例”中,我们将深入探讨Hessian框架的使用,特别是如何将其与Spring框架集成,以及如何构建server端和client端。 首先,让我们理解Hessian的工作原理。Hessian基于HTTP协议,它将Java对象序列...
该优化版SOFA-Hessian项目基于原生Hessian v4.0.51构建,经过蚂蚁金服多年内部稳定运行,现已进行多项改进。项目包含317个文件,其中Java源文件300个,XML、YML、Markdown、HTML等配置和说明文件共计7个,并支持...
10. **源码阅读**:对于深入理解Hessian的工作原理,阅读源码是一个很好的学习途径。通过查看源码,可以理解数据如何被序列化和反序列化,以及如何处理远程调用的细节。 综上所述,学习Hessian需要掌握二进制序列化...
在深入分析Hessian的源码之前,我们先来理解一下Hessian是什么。Hessian是一种二进制的Remoting协议,它允许Java应用通过HTTP进行高效、简洁的数据交换。Hessian客户端和服务端之间的通信基于HTTP协议,实现了远程...
hessian3.0.1.jar, 可以和spring1.x集成,不会报错
Hessian是一种高效的二进制序列化协议,常用于实现轻量级的远程过程调用(RPC)。这个案例涉及到了Hessian在Java和Python之间的跨语言通信。以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian...