`

mina框架 出现BufferUnderflowException异常的解决办法

    博客分类:
  • java
 
阅读更多

背景:使用mina进行socket编程,而传输数据大小会出现比较大的变化时,出现的BufferUnderflowException问题。

 

异常如下所示:

org.apache.mina.filter.codec.ProtocolDecoderException: org.apache.mina.core.buffer.BufferDataException: java.io.UTFDataFormatException (Hexdump: 00 00 73 72 01 00 13 6A 61 76 61 2E 75 74 69 6C 2E 41 72 72 61 79 4C 69 73 74 78 70 00 00 00 07 77 04 00 00 00 0A 73 71 00 7E 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 C9 00 00 00 00 00 00 00 6D 00 00 00 B8 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 00 00 00 00 00 70 70 74 00 36 68 74 74 70 3A 2F 2F 6D 2E 62 61 69 64 75 2E 63 6F 6D 2F 73 74 61 74 69 63 2F 69 6E 64 65 78 2F 66 61 76 69 63 6F 6E 2D 35 37 2E 70 6E 67 3F 74 6A 3D 69 63 6F 6E 73 71 00 7E 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3E 00 00 00 00 00 00 00 00 00 00 00 03 A1 00 00 00 00 00 00 00 00 00 00 00 A7 00 00 00 00 00 00 00 10 00 00 00 C8 00 00 00 00 00 00 00 00 70 70 74 00 25 68 74 74 70 3A 2F 2F 6D 2E 62 61 69 64 75 2E 63 6F 6D 2F 73 74 61 74 69 63 2F 69 6E 64 65 78 2F 69 2E 67 69 66 73 71 00 7E 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 00 00 00 00 00 00 00 00 00 00 00 00 98 00 00 00 00 00 00 00 00 00 00 00 A6 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 00 00 00 00 00 70 70 74 00 24 68 74 74 70 3A 2F 2F 6D 2E 62 61 69 64 75 2E 63 6F 6D 2F 73 74 61 74 69 63 2F 68 62 2F 68 6F 74 2E 67 69 66 73 71 00 7E 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 00 00 00 00 00 00 00 00 00 00 00 0B E3 00 00 00 00 00 00 00 00 00 00 00 A8 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 00 00 00 00 00 70 70 74 00 26 68 74 74 70 3A 2F 2F 6D 2E 62 61 69 64 75 2E 63 6F 6D 2F 73 74 61 74 69 63 2F 69 6E 64 65 78 2F 70 31 2E 70 6E 67 73 71 00 7E 00)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:251)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
at org.apache.mina.filter.logging.LoggingFilter.messageReceived(LoggingFilter.java:177)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:75)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

原因:mina框架生成TransportMetadata对象时,DefaultTransportMetadata的构造方法中有一个参数为fragmentation,boolean类型,分片标志。当设置为true时,会出现分包情况。而在未通过断包与粘包处理情况下,由于分包,最后数据不完整,从而导致异常。

 

框架处理原理分析:可以根据实际情况,设置buffersize的大小,让buffersize处在平均略高的状态下工作,节省由于初始设置过大,而浪费内存。

 

解决方案:

1,最简单的修改框架原码。将其中的NioSocketSession类重写即可,里面有TransportMetadata创建的地方修改。

2,通过对断包或粘包的处理。(网上已有相关的博客:http://blianchen.blog.163.com/blog/static/1310562992010101891522100/

 

 

 

2
2
分享到:
评论

相关推荐

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...

    mina框架资源包

    《mina框架资源包详解——构建即时通讯服务器的关键组件》 Mina框架,全称为Apache Mina,是一款基于Java开发的网络通信应用框架,它提供了一种简单而高性能的方式来构建网络服务,尤其在处理TCP/IP、UDP/IP以及SSL...

    MiNA框架新人指导

    - **健壮性**:内置了多种错误处理机制,确保应用程序能够在出现异常情况下正常运行。 #### 三、MiNA框架实践 在实际应用中,MiNA框架通常用于构建客户端和服务端的应用程序。以下是一些关于如何使用MiNA框架进行...

    Mina框架+常用JAR包

    Mina框架是一个高性能、异步事件驱动的网络应用程序框架,主要用Java语言编写,用于简化开发TCP、UDP和SSL/TLS协议服务器和客户端的过程。它广泛应用于构建网络服务,如FTP、SMTP、NNTP等协议的服务器,以及任何基于...

    Mina框架入门介绍

    例如,`messageReceived()`方法用于处理接收到的数据,而`exceptionCaught()`方法用于处理通信过程中出现的异常。此外,还有`sessionCreated()`和`sessionClosed()`等事件,分别对应于连接建立和关闭。 Mina的事件...

    mina 框架学习文档

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

    java mina框架全套

    Java Mina框架是一款高度可扩展且高性能的网络应用开发框架,专为开发网络服务和协议处理应用程序而设计。它提供了一种简洁、高效的API,使得开发者可以轻松地创建基于TCP/IP和UDP/IP协议的服务器和客户端应用。Mina...

    apache mina 框架实例

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用在开发网络通信应用,如TCP/IP和UDP/IP协议的服务器和客户端。这个框架允许开发者以一种简单、高效的方式处理I/O操作,同时提供了丰富的功能,如多...

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

    总结来说,Mina框架是一个强大的工具,用于构建高性能的网络服务,而SLF4J则提供了灵活的日志记录解决方案。通过下载的“Mina完整架包”,开发者可以获得所有必要的组件,开始创建自己的网络应用程序。

    Mina框架使用demo

    Mina框架是一个强大的网络应用开发框架,主要用于构建高性能、高可用性的网络服务器。在Java世界里,Mina因其异步事件驱动模型而受到广泛的青睐,它简化了TCP/IP和UDP协议编程,使得开发者可以专注于业务逻辑,而...

    MINA长连接框架实现通讯

    综上所述,MINA长连接框架在实现服务器与Android客户端通讯时,涉及到网络编程、数据传输协议、异常处理、过滤器机制、长连接维护等多个技术要点,开发者需要根据实际需求进行合理的架构设计和优化。通过MINA提供的...

    Apache MINA框架相关资料

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...

    mina框架的demo 入门,开发

    Mina框架是一个基于Java的网络通信应用框架,它为高性能、高可用性的网络应用程序提供了强大的支持。本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至...

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

    ### 高性能网络架构Mina框架简介 #### 一、Mina框架概述 Mina(Multithreaded Internet Network Application)框架是由Apache软件基金会提供的一个高性能、可伸缩的网络编程框架,它主要应用于Java NIO环境下的...

    mina框架使用总结.doc

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

    mina框架的jar包

    总的来说,这个压缩包提供了一个基础的Mina框架环境,并结合了SLF4J作为日志解决方案,便于开发者构建网络应用。在使用过程中,根据项目的具体需求,可能还需要添加其他的依赖,例如Spring框架的集成,或者特定的...

    Mina 框架研究与实现

    Mina框架正是为解决这一难题而生,它通过异步I/O和事件驱动机制,极大地提升了网络应用程序的效率和性能。结合Java NIO(非阻塞I/O),Mina使得开发者能够更专注于业务逻辑设计,而不必深陷底层I/O和线程并发的复杂...

    Apache mina框架入门教程

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

    mina框架使用总结

    MINA (Multipurpose Infrastructure for Network Applications) 是一个基于 Java 的网络应用框架,主要利用了 Java NIO (Non-blocking I/O) 技术。NIO 相比于传统的 BIo (Blocking I/O),提供了更高效的数据传输能力...

Global site tag (gtag.js) - Google Analytics