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
分享到:
相关推荐
1. **Java NIO基础**:Cindy是建立在Java NIO库之上的,因此首先需要了解Java NIO的基本概念,如选择器(Selector)、通道(Channel)、缓冲区(Buffer)等。理解它们如何协同工作,以及如何通过非阻塞方式处理I/O...
通过阅读源码,你可以了解到如何实现几何变换、碰撞检测、光线追踪等图形学基础算法。 Cindy库主要包括以下几个关键部分: 1. **几何数据结构**:Cindy提供了多种数据结构来表示几何对象,如点、线段、多边形等。...
cindy.jar 源码工具包
基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip ...
4. **缓冲区管理(Buffer Management)**:Cindy可能会有自己的一套缓冲区管理机制,确保高效地读写数据。 5. **调度器(Scheduler)**:用于安排定时任务,例如心跳检测、超时管理等。 6. **线程模型(Thread ...
JAVA源码异步IO框架CindyJAVA源码异步IO框架Cindy
5. **Cindy源码分析**:通过阅读和分析Cindy的源码,我们可以深入理解其内部工作原理,包括事件循环的实现、回调机制的调度以及如何优雅地处理并发问题。这对于提升Java并发编程和系统优化的能力非常有价值。 6. **...
4. **扩展性**:Cindy框架具有良好的模块化设计,支持插件扩展,方便添加新的功能或优化已有功能。 5. **性能优化**:Cindy在设计时充分考虑了性能优化,例如,通过NIO(New IO)库实现低级别的系统调用,减少系统...
在源码层面,Cindy可能采用了面向对象的设计模式,通过类和接口来封装各种IO操作和事件处理。同时,为了保持代码的可读性和可维护性,Cindy可能会遵循一定的设计原则,如单一职责原则、开闭原则等,并使用模块化设计...
Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
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 ...
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 ...
delphi 控件,优秀的界面设计工具 TcyBevel: multi colored bevels. - TcyPanel: runtime resize feature, multi colored bevels, gradient and shadow feature. - TcyAdvPanel: like TcyPanel plus wallpaper ...
《Cindy组件:全Delphi版本v3.23完整源码详解》 Cindy组件是为Delphi开发者提供的一套强大且美观的界面控件库,特别适用于那些追求个性化和高质量用户界面的项目。在"V3.23 Full Source"版本中,开发者将获得完整的...
4. **发起请求**:使用Cindy提供的API发起异步I/O请求,如读取或写入文件、网络连接等。 5. **处理响应**:当I/O操作完成时,回调的CompletionHandler或Promise的then()方法会被调用,处理响应结果。 ### 5. Cindy...
4. **线程模型**:Cindy可能采用单线程或多线程事件循环,根据应用场景灵活选择。 5. **兼容性**:Cindy应该兼容Java NIO,同时也可能提供了对Java NIO 2的支持,以便利用Java新版本提供的更多特性。 使用Cindy进行...
Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包。
4. 图形和图像处理组件(Graphics and Image Processing Components):这些组件可以用于处理图像,如图片加载、缩放、旋转、滤镜效果等,为开发多媒体应用提供了便利。 5. 日历和日期时间组件(Calendar and Date/...
运用了Cindy723/PyRPA: 基于Pyautogui的自动化工具 的脚本 unity和win混合 【使用方法】 Releases里下载双击运行Mion_pet.exe即可; 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的C#学习者。 ...