现在的位置: 首页 > 综合 > 正文

Mina源码阅读笔记(二)- IoBuffer的封装

2013年05月18日 ⁄ 综合 ⁄ 共 1076字 ⁄ 字号 评论关闭

在阅读IoBuffer源码之前,我们先看MinaIoBuffer的描述:A
byte buffer used by MINA applications. This is a replacement for ByteBuffer. 
这是一个对ByteBufferreplacement,同样是用作缓冲区,做内容的切换和承载的容器,为什么要用重新封装ByteBufferMINA是这么给出解释的Two
Reasons

l  It doesn't provide useful getters and putters

l  It is difficult to write variable-length data due to its fixed capacity

用过ByteBuffer的人可能经常会遇到BufferOverflowException这样的异常,原因是buffer在初始化allocate之后就不能再自动的改变大小了,如果项目很规整,约定的很好,那可能不太会出意外,怕就怕项目一大,好多东西就乱套了。所以在阅读IoBuffer源码的时候,我们会着重看它和ByteBuffer之间的差异。另外一点,就是IoBuffer作为一个应用框架的工具,必然会提供比原生Buffer更便捷的方法,比如IoBuffer中可以直接putget
String
,可以直接将内容转成十六进制等等。

用法很简单,我倒是想从如何将一个已有的类进行封装和扩展的角度来看IoBuffer的源码。在看MINA的源码之前,我们有必要稍稍回顾一下ByteBuffer的构成:

ByteBuffer继承了Buffer类,这个继承关系约定了Buffer系列中特定的操作形式(有点儿像指针),limit/position/mark/capacity,以及在遍历中使用的hasRemaining。然后通过两个静态方法来构建出ByteBuffer

使用Heap空间,堆空间的构造采用申请byte数组:

1 public static ByteBuffer
allocate(
int capacity)
{
2     if (capacity
< 
0)
3         throw new IllegalArgumentException();
4     return new HeapByteBuffer(capacity,
capacity);
5     }

使用direct memory,这块内存的开辟就比较麻烦了,好多都是采用了Bitnative的方法:

1 public static ByteBuffer
allocateDirect(
int capacity)
{

抱歉!评论已关闭.