`
zybing
  • 浏览: 459208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【Mina】IoBuffer

阅读更多

Mina中采用Iobuffer,而不是Nio中的 ByteBuffer,说主要是以下2个原因:

 

  • It doesn't provide useful getters and putters such as fill, get/putString, and get/putAsciiInt() .
  • It is difficult to write variable-length data due to its fixed capacity

 

但是在3.0中要有所改变:说是用扩展的buffer其实是一个坏的决定;有很多其他的解决方式存在

1. defining a wrapper which relies on a list of NIO ByteBuffers, instead of copying the existing buffer to a bigger one just because we want to extend the buffer capacity:

如定义一个依赖于Nio buffers的包装类,,来代替copy已经有的bugger到一个更大的buffer中去,只是因为想扩展buffer容量

2.It might also be more comfortable to use an InputStream instead of a byte buffer all along the filters, as it does not imply anything about the nature of the stored data : it can be a byte array, strings, messages...

也可以采用一个InputStream,在filter中代替byte buffer,它不指定存储的数据格式

3.Last, not least, the current implementation defeat one of the target : zero-copy strategy (ie, once we have read the data from the socket, we want to avoid a copy being done later). As we use extensible byte buffers, we will most certainly copy those data if we have to manage big messages. Assuming that the MINA ByteBuffer is just a wrapper on top of NIO ByteBuffer, this can be a real problem when using direct buffers.

再一次,不是最后一个,当前的实现方法违反了一个原则: 0拷贝策略

 

------------------------------------------------------------------------

不管怎么样子,在这个版本中,还是要使用IoBuffer的

 

Iobuffer(abstractor class)的分配:

用allocate方法,2个参数:

1. capacity:buffer的大小,单位字节

2. direct :  type of buffer. true to get direct buffer, false to get heap buffer

 

IoBuffer的setAutoExpand,可以自动扩展buffer大小

setAutoShrink,可以通过shrink函数,把buffer自动收缩到当初设定的最小尺寸

------------------------------------------------------------------------


IoBufferAllocater:一个buffer相关的接口,

现在已有2个实现:

SimplebufferAllocator(default)

CachedbufferAllocator

 

 

 

 

分享到:
评论

相关推荐

    mina core 包

    org.apache.mina.core.buffer.IoBuffer mina core 包

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

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

    mina学习的最佳代码

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为开发高性能和高可用性的网络应用程序而设计。MINA提供了高级通信抽象,如NIO(非阻塞I/O)和事件驱动的模型,使开发者...

    Mina 2.0 User Guide(Mina 2.0 用户指南)

    Chapter 10 - IoBuffer Chapter 11 - Codec Filter Chapter 12 - Executor Filter Chapter 13 - SSL Filter Chapter 14 - Logging Filter Part III - MINA Advanced Chapter 15 - Debugging Chapter 16 - State...

    Mina2.0阅读源码笔记(很值得一看)

    - IoBuffer 是 Mina 中用于数据存储和传输的核心类,它是对 Java NIO ByteBuffer 的封装和增强。 - **IoBuffer vs ByteBuffer**: IoBuffer 提供了更多便于操作的功能,比如自动扩容、直接内存分配等特性,使得数据...

    MINA_API+MINA_DOC+mina

    它可能还会涉及如何配置和使用MINA的各种组件,如Buffer、Filters、Protocols等,帮助开发者更好地理解和应用MINA到实际项目中。 最后,`Apache_Mina_Server_2.0中文参考手册V1.0.pdf` 是MINA服务器端的中文参考...

    Mina2中文文档

    - **IoBuffer详解**:IoBuffer是Mina用于高效内存管理的数据结构,本章节详细讲解了其内部机制和使用方法。 #### Chapter 9 - 编解码器过滤器 - **编解码器**:介绍如何使用Mina提供的编解码器过滤器对网络数据...

    mina 断包,粘包问题解决

    1. 缓冲区管理:Mina使用IoBuffer作为数据缓冲区,允许开发者对数据的读写进行精细控制。通过设置合适的缓冲区大小和正确地读写数据,可以有效防止数据丢失或交错。 2. 自定义编码解码器:Mina支持用户自定义编码器...

    Apache_MINA_2_用户指南.pdf

    * IoBuffer 是 MINA 中的一个核心组件,负责管理 I/O 缓存。 * IoBuffer 提供了一个灵活的架构,使得开发者可以轻松地构建高性能的 I/O 操作。 Chapter 9 - 编解码器过滤器 本章节介绍了 编解码器过滤器 的基本概念...

    mina-2.0.4 source code

    - **Buffer**:MINA使用IoBuffer作为缓冲区,它提供了高效的读写操作,并且支持自动扩容和预读写。 - **Filter**:过滤器是MINA中的关键组件,它们可以链式调用,用于数据的预处理和后处理,如压缩、加密、身份...

    mina-core-2.0.1.jar,apache-mina-2.0.1

    4. **Buffer**:MINA 提供了 ByteBuffer 和 IoBuffer 两种缓冲区,用于在网络通信中高效地读写数据。 **MINA 2.0.1 版本特点:** 1. **性能优化**:在 2.0.1 版本中,MINA 进行了多方面的性能提升,包括更快的数据...

    MINA TCP简单通信实例

    MINA提供了 IoBuffer 类,用于高效地存储和操作网络数据。你可以将数据写入Buffer,然后通过Session的write方法发送出去;接收数据时,MINA会自动将接收到的数据填充到Buffer中,供你读取。 在“MINA TCP简单通信...

    springboot整合mina

    public Object decode(IoBuffer in) throws Exception { int length = in.getInt(); if (in.getRemaining() ) { // 没有足够的数据,等待更多数据到达 return null; } byte[] data = new byte[length]; in....

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,...IoBuffer常用方法: 19 Demo1:模拟根据文本换行符编解码 20 Demo2:改进Demo1的代码 22 Demo3:自定义协议编解码 31 3.IoHandler接口 50 三. Mina实例 50 四. 其他 50

    mina自定义编码解码器

    例如,如果你有一个自定义的消息类`MyMessage`,你可以创建一个`MyMessageEncoder`,重写`encode()`方法,将`MyMessage`对象转换为`IoBuffer`。编码器的目的是确保数据在网络中传输时保持正确格式。 ```java public...

    mina开发实例

    4. **缓冲区管理**:Mina使用IoBuffer作为缓冲区对象,可以方便地进行读写操作,支持字节和对象之间的转换。 5. **性能优化**:Mina提供了池化的缓冲区和连接管理机制,以及心跳检测和空闲策略,以优化网络通信性能...

    Mina2.0完全剖析,完全自学手册【完整版】.doc

    mina学习资料 引言 1 一. Mina入门 2 ...IoBuffer常用方法: 19 Demo1:模拟根据文本换行符编解码 20 Demo2:改进Demo1的代码 22 Demo3:自定义协议编解码 31 3.IoHandler接口 50 三. Mina实例 50 四. 其他 50

    mina框架demo

    MINA(Multipurpose Infrastructure for ...- **IoBuffer**:MINA提供的缓冲区类,用于高效地处理网络数据。 通过分析和运行"TestMina"项目,你可以更深入地了解MINA如何处理网络通信,并将其应用到自己的项目中。

    Java学习之IO总结及mina和netty

    Java NIO(New IO)引入了通道(Channel)和缓冲区(Buffer)的概念,提高了IO性能,并支持非阻塞IO。 MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展且高性能的网络应用开发框架...

    mina简单示例

    数据通常以IoBuffer的形式在Mina中传递。 ```java public class MyHandler extends IoHandlerAdapter { @Override public void messageReceived(IoSession session, Object message) { // 处理接收到的数据 } ...

Global site tag (gtag.js) - Google Analytics