背景:
之前的 一篇介绍mina的博客中,提到通过mina来传输文件的demo,
具体的demo地址在这:
http://guoliangqi.iteye.com/blog/628063
当时的评论回复里面,有一个同学说用我的这个demo传输图片特别慢,是特别慢,不是慢。
我当时没在意就随手回了下,说nio对于传输这种单文件的优势并不明显。
但是我重新运行了这段代码,传输一个大概52K的图片的时候,真的很慢,差不多要30秒才传完,
当时我就震惊了,绝对是哪个地方不对导致的。于是就开始了一段找问题之路。
如果有兴趣看解决的过程的,可以看前面几个步骤,没兴趣的直接看最后的【正解&原因分析】吧
解决问题:
【算了,我自己都懒得写这个过程了!】
步骤一:
步骤二:
正解&原因分析:
问题出在使用的ObjectSerializationCodecFactory上,打开ObjectSerializationCodecFactory的源码,
查看在其编码的一段代码是这样写的。
public void encode(IoSession session, Object message,
ProtocolEncoderOutput out) throws Exception {
if (!(message instanceof Serializable)) {
throw new NotSerializableException();
}
//主要是这里
IoBuffer buf = IoBuffer.allocate(64);
buf.setAutoExpand(true);
buf.putObject(message);
int objectSize = buf.position() - 4;
if (objectSize > maxObjectSize) {
throw new IllegalArgumentException(
"The encoded object is too big: " + objectSize + " (> "
+ maxObjectSize + ')');
}
buf.flip();
out.write(buf);
}
可以看到这里,默认是用64bit来进行数据的解码,
而我的demo里面传输文件,用的是:
byte[] a = new byte[1024 * 4];
很明显,这个要比默认的那个64b长很多,导致内部需要进行频繁的操作之后,才能发送出去。
看到了这里,就修改了下以前用来传输的代码。
byte[] a = new byte[64];
然后再运行这个传输文件的demo,瞬间传输完。问题解决!
扩展:
后来看了下mina官方手册的,遇到这种问题,如果还需要传输大的字节数据,肯定不能用默认的这个ObjectSerializationCodecFactory来传输了,要么自己写一个继承他,修改下对应的decode方法,
要么自己来定义传输结构,重新进行codec的编写。
想要自己编写codec,可以参考这里:
http://mina.apache.org/tutorial-on-protocolcodecfilter-for-mina-2x.html
分享到:
相关推荐
Mina网络通信传输是基于Java开发的一个高性能、可伸缩的网络应用框架,常用于构建服务器和客户端之间的通信系统,尤其适用于即时聊天应用。Mina提供了丰富的API和工具,简化了网络编程的复杂性,使得开发者可以专注...
Apache Mina是一个开源的网络通信应用框架,主要应用于Java平台,它为高性能、高可用性的网络应用程序提供了基础架构。在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理...
MINA是Apache软件基金会的一个项目,它提供了一个高度可扩展和高性能的网络应用开发框架,适用于多种传输协议,如TCP/IP和UDP/IP,以及SSL/TLS加密。在大数据传输场景中,MINA因其非阻塞I/O模型而被广泛采用,能够...
Mina(MINA,全称Java Minimal Asynchronous Network Library)是一个用Java开发的网络通信框架,主要用于简化网络应用的开发,尤其是TCP和UDP协议的应用。它提供了高度抽象的API,使得开发者可以更专注于业务逻辑,...
Apache Mina是一个开源的Java框架,主要用于简化网络应用开发,特别是TCP/IP和UDP协议的应用。在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过...
通过以上这些知识点的深入理解和实践,你可以成功地将Mina与Spring集成,构建一个能够同时处理文件和文本传输的服务。这个过程涉及到了网络通信、协议设计、框架集成等多个层面,对提升你的Java网络编程能力大有裨益...
在IT行业中,Apache Mina是一个广泛使用的开源框架,主要用于创建高性能、高效率的网络应用程序。Mina提供了一种抽象层,使得开发者可以专注于业务逻辑,而不是底层的网络通信细节。本话题将深入探讨如何利用Mina...
MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,它提供了一个高度可扩展且跨平台的网络应用程序框架,主要用于简化开发高性能和高可用性的网络服务器和客户端。...
总结起来,使用SWT和Mina构建聊天系统是一个结合了GUI设计、网络通信和事件处理的综合实践。这个过程需要对SWT组件的使用有深入理解,同时也要掌握Mina的事件驱动模型和非阻塞I/O机制。通过这样的项目,开发者可以...
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
Apache Mina是一个开源的网络通信框架,常用于构建高性能、高效率的服务端应用程序,尤其在Java平台上。在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina...
在描述中提到的"mina简单事例"博客文章,作者可能详细解释了如何使用MINA框架创建一个简单的网络应用。通常,这样的示例会包含以下步骤: 1. **设置项目**: 创建一个新的Java项目,并引入MINA的依赖库。 2. **创建...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高级网络通信框架,主要针对Java平台设计,提供了高度可扩展和高性能的网络应用开发环境。MINA旨在简化网络编程,特别是对于TCP/IP和UDP...
Apache Mina是一个开源的Java框架,专门用于构建高性能、高可扩展性的网络应用程序。它提供了一个事件驱动的网络通信模型,使得开发者可以更方便地处理网络协议和I/O操作。在"mina学习基础-入门实例-传输定长报文(三...
Apache MINA是一个强大的网络通信框架,专为构建高性能和高可扩展性的网络应用程序设计。它基于事件驱动和异步模型,支持多种传输协议,如TCP/IP、UDP/IP、串口通信以及虚拟机内部的管道。MINA的核心理念是将网络...
通过这个"mina使用例子",你可以深入理解如何使用Mina来构建一个网络应用,从创建服务端、配置过滤器链,到处理客户端的连接和数据交换,以及如何进行性能优化和异常处理。这个例子将为你提供实践Mina框架的第一手...
mina网络编程框架,mina网络编程框架是你的网络编程更简单,我使用mina写了一个接口,还可以。如果有不明白的可以给我发邮件3864913429@163.com. qq:270445938
总结来说,Mina小Demo是一款结合了Mina的强大网络通信能力与Swing易用界面的示例应用,对于Java开发者来说,无论是学习网络编程还是GUI设计,都是一个很好的实践案例。通过深入研究其源码,我们可以更深入地理解Java...
Mina(Multithreaded Internet Network Application)框架是由Apache软件基金会提供的一个高性能、可伸缩的网络编程框架,它主要应用于Java NIO环境下的网络通信开发。Mina通过采用多线程模型和异步I/O技术来提高...
MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...