Mina源码阅读笔记 IoBuffer的封装

2022年10月6日09:13:16

在阅读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 publicstaticByteBuffer allocate(intcapacity) {
2 if(capacity <0)
3 thrownewIllegalArgumentException();
4 returnnewHeapByteBuffer(capacity, capacity);
5 }

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

1 publicstaticByteBuffer allocateDirect(intcapacity) {
  • 作者:hxwhou
  • 原文链接:https://blog.csdn.net/canlets/article/details/14446881
    更新时间:2022年10月6日09:13:16 ,共 1043 字。