-
关于MINA框架中报文读取的问题10
小弟在做项目的时候遇到了一个棘手的问题,希望各位大神出手相助!
如题,用的是MINA框架,读取短报文的时候没任何问题,但是在读取较长的报文的时候,老是会少读点东西,例如XML形式的字符串的某个标签。
下面是解码器:
package mds.gps.mina; import java.nio.ByteBuffer; import mds.gps.utils.HexUtil; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolDecoder; import org.apache.mina.filter.codec.ProtocolDecoderOutput; import com.sun.org.apache.bcel.internal.generic.NEW; /** * MINA解码器 * * @author Administrator * */ public class MyTextLineDecoder implements ProtocolDecoder { IoBuffer buf = IoBuffer.allocate(8192).setAutoExpand(true).setAutoShrink(true); public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput output) throws Exception { System.out.println(in.capacity()); ByteBuffer receiveBytes; buf.flip(); //字符串拼接缓冲 String cache=MinaClient.getStrRec(); // while (in.hasRemaining()) { byte b = in.get(); if (b == '\n') { buf.flip(); byte[] bytes = new byte[buf.limit()]; buf.get(bytes); String message =cache+new String(bytes,"gbk")+"\n"; cache=message; MinaClient.setStrRec(cache); //读到这个标签就结束,输出 if(cache.contains("</package>")){ output.write(cache); MinaClient.setStrRec(""); cache=""; } buf.clear(); buf.flip(); buf = IoBuffer.allocate(8192).setAutoExpand(true).setAutoShrink(true); } else { buf.put(b); } } } public void dispose(IoSession arg0) throws Exception { System.out.println("disposedisposedisposedisposedisposedisposedisposedisposedisposedisposedisposedisposedispose"); } public void finishDecode(IoSession arg0, ProtocolDecoderOutput arg1) throws Exception { System.out.println("finishDecodefinishDecodefinishDecodefinishDecodefinishDecodefinishDecodefinishDecodefinishDecode"); } }
接下来是读取的xml形式的字符串,总是少读一标签导致解析出错:
<?xml version="1.0" encoding="utf-8"?> <package> <head> <version>1</version> <message>ResGetDepartmentList</message> <session>f6a9f429d2e54e9782740bad6c84c4ab</session> <workflow>67606</workflow> </head> <body> <departmentlist><department><id>1</id> <name>绿源</name> <father>0</father> </department> <department><id>2</id> <name>绿源测试</name> <father>1</father> </department> <department><id>3</id> <name>经销商2</name> <father>1</father> </department> <department><id>4</id> <name>经销商3</name> <father>1</father> </department> <department><id>8</id> <name>qqqqqqqq</name> <father>1</father> </department> <department><id>9</id> <name>ww</name> 1</father><!--就是这儿--> </department> <department><id>10</id> <name>111111</name> <father>1</father> </department> <department><id>16</id> <name>jrx</name> <father>10</father> </department> <department><id>17</id> <name>hhhhh</name> <father>10</father> </department> <count>9</count> </departmentlist> </body> </package>
本来是用普通的socket输入流开了个线程接收报文的,一切正常,后来改用MINA框架,出了这个问题。其他部分应该都没错,问题应该就出在解码器上,请大家帮忙看下,感激不尽!
2012年11月05日 18:12
目前还没有答案
相关推荐
总结来说,本教程将引导你从理论到实践,掌握Java NIO的基本原理,理解Mina框架的使用,以及如何在SpringBoot环境中整合Mina实现高效的网络通信。通过这些知识的学习,你将具备开发高并发、高性能网络应用的能力。
在Mina框架中,SLF4J被用作日志接口,使得开发者可以根据实际需求选择合适的日志实现,便于调试和监控程序运行状态。 结合这三个文件,开发者可以快速搭建一个基于Mina的即时通讯服务器。首先,将`apache-mina-...
以下是一些关于如何使用MiNA框架进行开发的示例: ##### 1. 服务端演示 服务端的应用程序通常是接收来自客户端请求的服务方。在MiNA框架中,服务端的搭建相对简单,可以通过以下几个步骤实现: - **创建...
在Mina框架中,JAR包通常包含框架的实现类、依赖库和其他资源。常用的JAR包可能包括Mina的核心库、特定协议实现、以及与之相关的第三方依赖。 **Mina框架中常见的JAR包及其作用:** 1. **mina-core.jar**:包含...
在Mina中,我们可以利用BufferedIoFilter或者IoBuffer来传输文件,包括图片。首先,我们需要将图片文件读取到内存中的IoBuffer,然后通过过滤器链传递给远程客户端。在这个过程中,可以实现数据压缩、加密等额外...
在Mina中,开发者可以创建一个服务端来监听特定端口,并接收客户端的连接请求。一旦连接建立,Mina会通过事件模型来处理数据传输。服务端和客户端的交互通常涉及编码、解码、业务逻辑处理等步骤。例如,你可以创建一...
`IoHandler`是Mina中的另一个重要组件,它负责处理客户端的事件。当接收到客户端的数据或发生特定事件时,IoHandler会被调用执行相应的逻辑。例如,`messageReceived()`方法用于处理接收到的数据,而`exception...
1. **Session**:Mina中的会话接口,代表了网络连接。每个网络连接都被抽象为一个Session对象,可以进行读写操作,并提供了事件驱动的机制来处理连接的打开、关闭、读写事件。 2. **Filter**:过滤器是Mina框架中的...
apache mina 框架的学习文档,通过此文档可以基本了解mina框架。
在Mina中,处理定长报文涉及到数据读取和写入的精确控制。 1. **Mina框架简介**:Mina提供了一套丰富的API,用于处理TCP/IP、UDP等网络协议,支持Socket和NIO(非阻塞I/O)模式。它的核心组件包括Session、Filter、...
标题中的“Apache MINA框架相关资料”涵盖了对MINA框架的全面学习材料,包括中文参考手册、源码分析、API文档和与Spring框架的整合指南。 1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这...
在Mina中,我们可以通过创建Acceptor(监听器)和Connector(连接器)来实现长连接。Acceptor负责监听特定端口的连接请求,而Connector则用于发起连接到指定服务器的请求。在LongConnectionDemo中,我们可以看到这两...
Mina框架是一个高性能、事件驱动的网络应用框架,主要用于简化Java网络编程,特别是TCP和UDP协议的处理。它被广泛应用于开发服务器端应用,如FTP、SMTP、HTTP等协议的服务,以及任何基于TCP或UDP协议的应用。Mina的...
1. **IoSession**:这是Mina中的核心接口,代表一个连接会话。它包含了连接的状态信息,如读写缓冲区、会话属性以及传输数据的相关方法。 2. **Filter Chain**:Mina使用过滤器链来处理进来的消息。过滤器可以对...
3. **服务端实现**:在MINA中,服务端通常由`NioServerSocketConnector`来创建,它监听指定的端口,等待客户端的连接。服务端接收到连接请求后,会创建一个`Session`对象来代表与特定客户端的连接。每当有数据到达时...
2. **MINA Server端实现**:在MINA中,Server端主要负责监听指定的端口,接收到客户端连接请求后,创建一个Session对象来代表与该客户端的连接。Server端可以通过自定义的Filter(过滤器)来处理进来的数据,如解码...
在Mina 2.0版本中,框架分为Server端和Client端,两者都在通信结构中扮演着类似的角色,将网络通信与业务逻辑分离,使得开发者可以专注于数据处理和业务实现。Mina 的执行流程主要包括以下几个关键组件: 1. **...
Session是Mina中表示客户端连接会话的对象,它封装了连接状态和数据传输的相关信息。每个连接都有一个对应的Session对象,通过它可以获取和设置连接属性、发送消息等。 ##### 3.4 Buffer Buffer是Mina中用于存储和...
mina 框架使用总结 mina 框架是对 Java 的 NIO 包的一个封装,简化了 NIO 程序开发的难度,封装了很多底层的细节,使开发者把精力集中到业务逻辑上来。下面是对 mina 框架使用的总结。 1. MINA 框架概述 MINA ...
在这个压缩包中,包含了Mina框架的核心组件——`mina-core-2.0.0.jar`,这是Mina的核心库,提供了I/O处理、编码解码、协议处理等功能。它支持多种传输层协议,如TCP、UDP、本地套接字等,通过简单的API,开发者可以...