0 0

关于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 springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    总结来说,本教程将引导你从理论到实践,掌握Java NIO的基本原理,理解Mina框架的使用,以及如何在SpringBoot环境中整合Mina实现高效的网络通信。通过这些知识的学习,你将具备开发高并发、高性能网络应用的能力。

    mina框架资源包

    在Mina框架中,SLF4J被用作日志接口,使得开发者可以根据实际需求选择合适的日志实现,便于调试和监控程序运行状态。 结合这三个文件,开发者可以快速搭建一个基于Mina的即时通讯服务器。首先,将`apache-mina-...

    MiNA框架新人指导

    以下是一些关于如何使用MiNA框架进行开发的示例: ##### 1. 服务端演示 服务端的应用程序通常是接收来自客户端请求的服务方。在MiNA框架中,服务端的搭建相对简单,可以通过以下几个步骤实现: - **创建...

    Mina框架+常用JAR包

    在Mina框架中,JAR包通常包含框架的实现类、依赖库和其他资源。常用的JAR包可能包括Mina的核心库、特定协议实现、以及与之相关的第三方依赖。 **Mina框架中常见的JAR包及其作用:** 1. **mina-core.jar**:包含...

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

    在Mina中,我们可以利用BufferedIoFilter或者IoBuffer来传输文件,包括图片。首先,我们需要将图片文件读取到内存中的IoBuffer,然后通过过滤器链传递给远程客户端。在这个过程中,可以实现数据压缩、加密等额外...

    apache mina 框架实例

    在Mina中,开发者可以创建一个服务端来监听特定端口,并接收客户端的连接请求。一旦连接建立,Mina会通过事件模型来处理数据传输。服务端和客户端的交互通常涉及编码、解码、业务逻辑处理等步骤。例如,你可以创建一...

    Mina框架入门介绍

    `IoHandler`是Mina中的另一个重要组件,它负责处理客户端的事件。当接收到客户端的数据或发生特定事件时,IoHandler会被调用执行相应的逻辑。例如,`messageReceived()`方法用于处理接收到的数据,而`exception...

    java mina框架全套

    1. **Session**:Mina中的会话接口,代表了网络连接。每个网络连接都被抽象为一个Session对象,可以进行读写操作,并提供了事件驱动的机制来处理连接的打开、关闭、读写事件。 2. **Filter**:过滤器是Mina框架中的...

    mina 框架学习文档

    apache mina 框架的学习文档,通过此文档可以基本了解mina框架。

    mina学习基础-入门实例-传输定长报文(三)

    在Mina中,处理定长报文涉及到数据读取和写入的精确控制。 1. **Mina框架简介**:Mina提供了一套丰富的API,用于处理TCP/IP、UDP等网络协议,支持Socket和NIO(非阻塞I/O)模式。它的核心组件包括Session、Filter、...

    Apache MINA框架相关资料

    标题中的“Apache MINA框架相关资料”涵盖了对MINA框架的全面学习材料,包括中文参考手册、源码分析、API文档和与Spring框架的整合指南。 1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这...

    Mina框架使用demo

    在Mina中,我们可以通过创建Acceptor(监听器)和Connector(连接器)来实现长连接。Acceptor负责监听特定端口的连接请求,而Connector则用于发起连接到指定服务器的请求。在LongConnectionDemo中,我们可以看到这两...

    mina框架开发完整架包下载!

    Mina框架是一个高性能、事件驱动的网络应用框架,主要用于简化Java网络编程,特别是TCP和UDP协议的处理。它被广泛应用于开发服务器端应用,如FTP、SMTP、HTTP等协议的服务,以及任何基于TCP或UDP协议的应用。Mina的...

    mina框架的demo 入门,开发

    1. **IoSession**:这是Mina中的核心接口,代表一个连接会话。它包含了连接的状态信息,如读写缓冲区、会话属性以及传输数据的相关方法。 2. **Filter Chain**:Mina使用过滤器链来处理进来的消息。过滤器可以对...

    mina框架中socket使用,有服务端和客户端。

    3. **服务端实现**:在MINA中,服务端通常由`NioServerSocketConnector`来创建,它监听指定的端口,等待客户端的连接。服务端接收到连接请求后,会创建一个`Session`对象来代表与特定客户端的连接。每当有数据到达时...

    MINA长连接框架实现通讯

    2. **MINA Server端实现**:在MINA中,Server端主要负责监听指定的端口,接收到客户端连接请求后,创建一个Session对象来代表与该客户端的连接。Server端可以通过自定义的Filter(过滤器)来处理进来的数据,如解码...

    Apache mina框架入门教程

    在Mina 2.0版本中,框架分为Server端和Client端,两者都在通信结构中扮演着类似的角色,将网络通信与业务逻辑分离,使得开发者可以专注于数据处理和业务实现。Mina 的执行流程主要包括以下几个关键组件: 1. **...

    高性能网络架构Mina框架 下载

    Session是Mina中表示客户端连接会话的对象,它封装了连接状态和数据传输的相关信息。每个连接都有一个对应的Session对象,通过它可以获取和设置连接属性、发送消息等。 ##### 3.4 Buffer Buffer是Mina中用于存储和...

    mina框架使用总结.doc

    mina 框架使用总结 mina 框架是对 Java 的 NIO 包的一个封装,简化了 NIO 程序开发的难度,封装了很多底层的细节,使开发者把精力集中到业务逻辑上来。下面是对 mina 框架使用的总结。 1. MINA 框架概述 MINA ...

    mina框架的jar包

    在这个压缩包中,包含了Mina框架的核心组件——`mina-core-2.0.0.jar`,这是Mina的核心库,提供了I/O处理、编码解码、协议处理等功能。它支持多种传输层协议,如TCP、UDP、本地套接字等,通过简单的API,开发者可以...

Global site tag (gtag.js) - Google Analytics