`
peterwanghao
  • 浏览: 128452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Apache Mina时做编码转换的方法

 
阅读更多

在使用Apache MINA开发网络应用时需要使用一个过滤器来实现数据的编解码,因为在网络传输的数据都是二进制数据(byte),而你在程序中面向的是JAVA 对象,这就需要你实现在发送数据时将JAVA 对象编码二进制数据,而接收数据时将二进制数据解码为JAVA 对象。

Mina 中的协议编解码器通过过滤器ProtocolCodecFilter 构造,这个过滤器的构造方法需要一个ProtocolCodecFactory。

ProtocolCodecFactory 中有如下两个方法:

public interfaceProtocolCodecFactory {

ProtocolEncodergetEncoder(IoSession session) throws Exception;

ProtocolDecodergetDecoder(IoSession session) throws Exception;

}

因此,构建一个ProtocolCodecFactory 需要ProtocolEncoder、ProtocolDecoder 两个实例。

Mina 自带了几个编解码器工厂:TextLineCodecFactory 编解码器工厂来对字符串进行编解码处理。ObjectSerializationCodecFactory,一个Java对象的序列化和反序列化方法。PrefixedStringCodecFactory对使用固定长度作为前缀的字符串进行编解码处理。DemuxingProtocolCodecFactory,一个复合的编解码工厂可以包含多个消息编解码处理器。

在实际使用过程中由于业务规则不同可能会自定义编解码。也就是根据Server 端和Client 端约定网络传输的数据格式定义二进制数据与JAVA对象之间是如何转换的。实现的过程是先定义好协议对象,然后实现编码器(需继承适配器ProtocolEncoderAdapter),实行解码器(需继承CumulativeProtocolDecoder),最后是定义编解码工厂用来封装编码器和解码器。对于如何实现,在官网上提供了一个具体的实现例子http://mina.apache.org/tutorial-on-protocolcodecfilter-for-mina-2x.html。也有朋友将其翻译成中文http://blog.sina.com.cn/s/blog_608f624f0100l1e1.html

下面总结我在使用时出现的几个问题:

1)对变长的数据处理,一般是在包头定义好包体的长度,根据定义好的长度来取数据。可按下述方法取:

in.mark();

if (bodyLen> in.remaining()) {

in.reset();

return false;

}else {

String szUserId = in.getString(64,charset.newDecoder());

message.setSzUserId(szUserId);

}

2)无符号的长整型字段,4个字节

longulSequence = in.getUnsignedInt();

3)JAVA对象转为二进制时,不足位补0。每个字段都要设置长度不然下一字段会跟在后面。

buffer.putString(message.getSzUserId(), 64,charset.newEncoder());

buffer.putString(message.getSzUserName(), 20,charset.newEncoder());

这样userid如果不足64位的会用\0补齐。


分享到:
评论

相关推荐

    apache Mina的完整学习资料

    3. **Protocol Codec**:Apache Mina提供了多种编码器和解码器,如ByteToMessageDecoder和MessageToByteEncoder,用于处理不同协议的数据格式转换。 4. **NIO(Non-blocking I/O)**:Mina利用Java的NIO库,实现高效...

    Apache Mina 入门Demo

    4. **协议编码和解码**:Mina提供了多种编码器和解码器,用于将用户数据转换为网络传输格式,如ByteToMessageDecoder和MessageToByteEncoder。你可以根据需要自定义这些编码器和解码器以适应特定的协议。 5. **事件...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

    Apache MINA 2.0 用户指南( 缺第一章节)

    Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层的网络细节。MINA 2.0 支持多种网络协议,包括 TCP 和 UDP,...

    apache mina-spring 服务端程序

    4. **协议编码解码器**:用于将网络传输的数据转换为业务对象,反之亦然,可能实现了Mina的ProtocolCodec接口。 5. **测试用例**:验证服务端功能的JUnit或其他测试框架的测试类。 通过这个项目,开发者可以学习到...

    apache_mina_maven 客户端测试程序

    3. **消息编码解码**:MINA 提供了 `ProtocolDecoder` 和 `ProtocolEncoder` 接口,用于将应用层的消息转换成字节流,以及将接收到的字节流转换回消息对象。 4. **服务端交互**:测试程序会发送请求到服务器并接收...

    Apache mina源代码框架解析

    在这里,我们添加了两个过滤器:`LoggingFilter`用于记录网络通信的日志,以及`ProtocolCodecFilter`,它使用`TextLineCodecFactory`来编码和解码文本消息。`TextLineCodecFactory`依赖于指定的字符集(这里是UTF-8...

    使用 Apache MINA 开发高性能网络应用程序

    1. **I/O 事件处理**:MINA 使用事件驱动模型,当网络事件发生时(如连接建立、数据读取或写入完成),会触发相应的处理器。这使得程序可以高效地处理并发连接,无需为每个连接创建单独的线程。 2. **IoAcceptor**...

    apache mina socket

    在本文中,我们将深入探讨Apache Mina的核心概念、设计模式以及如何使用它来实现基于Socket的通信。 **Apache Mina的核心概念:** 1. **Event-Driven模型**:Mina采用了事件驱动模型,当网络事件(如数据接收、...

    apache-mina-2.0.16-jar包-代码.zip

    使用Apache Mina时,开发者通常需要了解以下关键概念: - **Session**:代表一个网络连接,存储了与该连接相关的状态和属性。 - **Filter**:过滤器是处理数据或控制流的组件,可以通过添加、删除或调整过滤器顺序...

    mina自定义编码器-自行做会话累积

    总之,自定义Mina编码器以实现会话累积功能涉及到了网络通信的优化,需要对Mina框架有深入的理解,以及对序列化和网络通信协议的熟悉。通过这样的定制,我们可以更高效地利用网络资源,提升系统的整体性能。

    Apache MINA框架所用的jar包

    - **Protocol Codec**:MINA提供了多种编码和解码器,用于将复杂的数据结构转换为字节流,反之亦然,方便在网络间传输。 总的来说,Apache MINA提供了一套强大的工具,使开发者能够快速、高效地构建跨平台的网络...

    Apache mina框架入门教程

    Apache Mina 框架是一个强大的网络通信应用框架,它主要针对基于TCP/IP和UDP/IP的协议栈,同时也支持Java对象序列化和其他通信方式。Mina 的核心设计目标是帮助开发者快速构建高性能、高可扩展性的网络应用。它采用...

    apache mina实现多人聊天室

    在实现多人聊天室时,首先需要创建一个Server端,该端使用Mina提供的Acceptor监听指定端口,等待客户端的连接请求。当有新的客户端连接时,Mina会自动创建一个新的Session对象来管理这个连接。接着,我们需要定义...

    ApacheMina入门

    Apache Mina的核心思想是“事件驱动”和“异步I/O”,这使得它在处理大量并发连接时表现出色。它提供了一个统一的API,无论底层是TCP/IP、UDP还是其他协议,开发者都能用相同的接口进行操作,极大地降低了开发复杂性...

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    总的来说,Apache Mina是一个强大的工具,适合构建复杂的网络服务,特别是当需要高效处理大量并发连接和传输各种类型的数据时。通过深入理解并熟练运用Mina的高级特性,我们可以构建出高效、可靠的网络应用。

    这是Apache Mina Server 2.0的中文参考手册,版本为1.0

    在本手册中,我们将深入探讨Apache Mina Server 2.0的各个方面,帮助初学者快速掌握其核心概念和使用方法。 首先,让我们了解Mina的基本架构。Mina采用事件驱动和非阻塞I/O模型,这种设计使得它能够在处理大量并发...

    深入理解Apache Mina (2)---- 与IoFilter相关的几个类

    Apache Mina的IoFilter主要有以下作用:记录事件日志、测量系统性能、验证信息、过载控制以及信息的转换(例如编码和解码)。 要深入理解IoFilter,我们需从以下几个方面入手: 1. IoFilter的工作机制与应用场景 ...

    Mina 1.1.7 示例源码(apache.mina.example)

    Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络通信应用。在Mina 1.1.7版本中,提供的示例源码是学习和理解Mina框架工作原理及其实现各种网络协议的重要资源。这个压缩包"apache.mina.example"包含...

Global site tag (gtag.js) - Google Analytics