`

cindy源码阅读(4)Buffer

 
阅读更多
cindy自己写了个buffer接口,功能更多更丰富。具体可以看看,真的很多 呵呵

而且有些实现类。



ByteArrayBuffer其实是对byte[]的封装,ByteBufferBuffer是对原始ByteBuffer的封装。LinkedBuffer是对buffer数组的封装,他们都有个wrap方法。Delegate开头的都是这些buffer代理类,

如果使用的ByteArrayEncoder,ByteBufferEncoder,BufferEncoder这些来编码的话, 选择具体哪个buffer是在BufferFactory类确定的,如
 public static Buffer wrap(byte[] array) {
        return ByteArrayBuffer.wrap(array);
    }


如果使用的是SerialEncoder来编码的话,buffer的构建是由BufferBuilder。
  public BufferBuilder(int capacity) {
        if (capacity <= 0)
            capacity = 512;
        buffer = BufferFactory.allocate(capacity);
    }


BufferPool的实现类有DefaultBufferPool和NullBufferPool
DefaultBufferPool:
  public static Buffer allocate(int capacity, boolean direct) {
        if (capacity < 0)
            throw new IllegalArgumentException();
        return pool.allocate(capacity, direct);
    }


 public Buffer allocate(int capacity, boolean direct) {
        getCount.incrementAndGet();

        int index = indexFor(capacity);
        if (index >= 0) {
            Integer key = new Integer(capacity);
            Object obj = get(direct, index, key);
            if (obj == null && ++index != POSITIVE_INTEGER_SIZE)
                obj = get(direct, index, key);

            if (obj != null) {
                hitCount.incrementAndGet();
                if (direct) {
                    ByteBuffer content = (ByteBuffer) obj;
                    content.clear();
                    return new DirectBuffer(content, capacity);
                } else {
                    return new HeapBuffer((byte[]) obj, capacity);
                }


可以看到DefaultBufferPool最后得到的要么是DirectBuffer,要么是HeapBuffer。
BufferFactory:
 private static final boolean useDirectBuffer = Configuration
            .isUseDirectBuffer();

除非配置文件写了使用DirectBuffer,否则使用的是HeapBuffer

NullBufferPool :
public class NullBufferPool implements BufferPool {

    public Buffer allocate(int capacity, boolean direct) {
        return direct ? (Buffer) ByteBufferBuffer.allocate(capacity, true)
                : ByteArrayBuffer.allocate(capacity);
    }

}

NullBufferPool 得到是ByteBufferBuffer。

当buffer的资源释放异常的时候会 抛出ReleasedBufferException这个异常。

总的来说buffer的结构还是比较清晰的,就是看起来好像类很多。

  • 大小: 11.7 KB
分享到:
评论

相关推荐

    开源nio框架cindy源码

    1. **Java NIO基础**:Cindy是建立在Java NIO库之上的,因此首先需要了解Java NIO的基本概念,如选择器(Selector)、通道(Channel)、缓冲区(Buffer)等。理解它们如何协同工作,以及如何通过非阻塞方式处理I/O...

    cindy最新源码和库

    通过阅读源码,你可以了解到如何实现几何变换、碰撞检测、光线追踪等图形学基础算法。 Cindy库主要包括以下几个关键部分: 1. **几何数据结构**:Cindy提供了多种数据结构来表示几何对象,如点、线段、多边形等。...

    cindy.jar 源码工具包

    cindy.jar 源码工具包

    基于java的开发源码-异步IO框架 Cindy.zip

    基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip ...

    异步IO框架 Cindy源码

    4. **缓冲区管理(Buffer Management)**:Cindy可能会有自己的一套缓冲区管理机制,确保高效地读写数据。 5. **调度器(Scheduler)**:用于安排定时任务,例如心跳检测、超时管理等。 6. **线程模型(Thread ...

    JAVA源码异步IO框架CindyJAVA源码异步IO框架Cindy

    JAVA源码异步IO框架CindyJAVA源码异步IO框架Cindy

    基于Java的实例源码-异步IO框架 Cindy.zip

    5. **Cindy源码分析**:通过阅读和分析Cindy的源码,我们可以深入理解其内部工作原理,包括事件循环的实现、回调机制的调度以及如何优雅地处理并发问题。这对于提升Java并发编程和系统优化的能力非常有价值。 6. **...

    java源码:异步IO框架 Cindy.rar

    4. **扩展性**:Cindy框架具有良好的模块化设计,支持插件扩展,方便添加新的功能或优化已有功能。 5. **性能优化**:Cindy在设计时充分考虑了性能优化,例如,通过NIO(New IO)库实现低级别的系统调用,减少系统...

    异步IO框架 Cindy

    在源码层面,Cindy可能采用了面向对象的设计模式,通过类和接口来封装各种IO操作和事件处理。同时,为了保持代码的可读性和可维护性,Cindy可能会遵循一定的设计原则,如单一职责原则、开闭原则等,并使用模块化设计...

    Cindy 3.0b1 的源码--- Mina的兄弟

    Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包

    小程序 异步IO框架 Cindy(源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    Cindy components v6.53 for All Delphi

    Packages with 71 components for all delphi versions (since D7) to build Windows 32/64 bit applications: VCL controls (labels, buttons, panels, Edits, TabControls, StaticText) with features like ...

    Cindy components for all Delphi versions

    Packages with 76 components for all delphi versions (since D7) to build Windows 32/64 bit applications: VCL controls (labels, buttons, panels, Edits, TabControls, StaticText) with features like ...

    Cindy components for all Delphi versions 6.60

    delphi 控件,优秀的界面设计工具 TcyBevel: multi colored bevels. - TcyPanel: runtime resize feature, multi colored bevels, gradient and shadow feature. - TcyAdvPanel: like TcyPanel plus wallpaper ...

    Cindy components for all delphi versions v3.23 Full Source

    《Cindy组件:全Delphi版本v3.23完整源码详解》 Cindy组件是为Delphi开发者提供的一套强大且美观的界面控件库,特别适用于那些追求个性化和高质量用户界面的项目。在"V3.23 Full Source"版本中,开发者将获得完整的...

    基于Java的异步IO框架 Cindy.zip

    4. **发起请求**:使用Cindy提供的API发起异步I/O请求,如读取或写入文件、网络连接等。 5. **处理响应**:当I/O操作完成时,回调的CompletionHandler或Promise的then()方法会被调用,处理响应结果。 ### 5. Cindy...

    基于java的异步IO框架 Cindy.zip

    4. **线程模型**:Cindy可能采用单线程或多线程事件循环,根据应用场景灵活选择。 5. **兼容性**:Cindy应该兼容Java NIO,同时也可能提供了对Java NIO 2的支持,以便利用Java新版本提供的更多特性。 使用Cindy进行...

    Netty 3.0.2.GA 的源码--- Mina的兄弟

    Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包。

    Cindy components v4.43 + Demo.zip

    4. 图形和图像处理组件(Graphics and Image Processing Components):这些组件可以用于处理图像,如图片加载、缩放、旋转、滤镜效果等,为开发多媒体应用提供了便利。 5. 日历和日期时间组件(Calendar and Date/...

    基于C#开发的桌面宠物程序源码+可执行程序+项目说明.zip

    运用了Cindy723/PyRPA: 基于Pyautogui的自动化工具 的脚本 unity和win混合 【使用方法】 Releases里下载双击运行Mion_pet.exe即可; 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的C#学习者。 ...

Global site tag (gtag.js) - Google Analytics