一:Buffer是什么?
- Buffer是java.nio框架下的一个缓冲类,用来存储java的基本类型的数据,比如byte,char,long,int,double,
- short等数据的类型.缓冲区是一个可以读写的数据,nio的通道通过Buffer来读写数据,比如从通道channel读数据的时候,会先把一块的数据都到缓冲区中.把数据写入到通道的时候,同样会先把数据存储到缓冲区中.
- 它是nio框架的核心类,它是一个抽象类,它的子类包括 ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、 IntBuffer、LongBuffer 和 ShortBuffer.
二:Buffer重要属性:
Buffer中里定义类四个属性,mark,position,limit,capacity,那这四个属性又是做什么用呢?
1. Cpapcity:表示容量,表示缓冲区可以存储的最大的容量
2. Limit : 表示缓冲区的上限,在文档中这样解释:
A buffer's limit is the index of the first element that should not be read or written.
limit 的值是第一个不能读写的元素的位置,比如limit = 512,表示从512这个位置开始的空间不能读写,就不能用. position
3.mark : 一个标记位置,标记重置的位置,在文档中这样说到:
A buffer's mark is the index to which its position will be reset when the {@link #reset reset} method is invoked
4.position : 当前缓存可以读取的索引位置
三:Buffer操作
缓冲的通常操作包括读取缓冲数据和写入缓冲数据,除了这之外,buffer还提供了清空缓冲、反转和rewinding(倒卷,这个词不知道如何翻译好)
1. clearing : 清空缓存,但是不清除缓存的数据. 代码如下
public final Buffer clear()
{
position = 0;
limit = capacity;
mark = -1;
return this;
}
2.Flip: flip buffer,按字面理解是反转缓存,那么怎么反转缓存呢?看下面的代码就比较清楚了.
public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
看上面的代码就知道了,缓存区的上界为position,position以后的缓存区不可用,这个缓存区的当前位置从0开始.
3.rewind :rewind操作让当前的缓冲区的位置从0开始,mark=-1,就等于重置缓存区,从缓存区的0位置开始读取. 代码如下:
public final Buffer rewind() {
position = 0;
mark = -1;
return this;
}
四:非线程安全
非线程安全:Buffer是非线程安全,如果一个缓存区被多个线程使用的话,需要通过synchronization来控制线程安全.
总结:
- Buffer是nio框架的一个核心类也是一个基础类,是一个用来存储java的基本类型的数据的缓存对象. 子类包括 :ByteBuffer 、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer.
- 重要的属性包括 capacity,mark,position,limit.capacity表示缓冲区的容量,mark表示重置的时候的标记, position表示当前缓存区可用读取的位置,limit表示缓存区可以操作的上界.
- Buffer是一个抽象类,已经提供了clearing、flip、rewind3个重要操作,clearing表示是清空缓存数据,
- flip表示是对反转当前缓存区,rewind表示重新读取缓存区的数据.
- Buffer是一个非线程安全的类.
相关推荐
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种新的I/O方式,与传统的BIO(Blocking I/O)相比,...通过深入学习和实践NIO,以及相关框架如Netty和Mina,开发者可以提升其在网络编程领域的专业技能。
NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道可以读写数据,缓冲区用于临时存储数据,选择器则用于监听多个通道的事件,实现了多路复用,从而实现非阻塞I/O。 3. **HttpCore NIO...
Matrix-NIO是一个轻量级的、高性能的网络通信框架,它利用Java NIO(非阻塞I/O)技术来实现高效的网络连接管理。而NIO-Template则可能是一个基于Matrix-NIO的模板或工具集,用于简化基于NIO的网络应用开发。 在Java...
总的来说,"基于Groovy的NIO框架"提供了一种学习和实践Java NIO技术的新途径,尤其是对于那些熟悉Groovy的开发者来说,他们可以利用Groovy的便利性来优化和简化NIO应用的开发。通过深入理解并应用上述知识点,可以...
总的来说,这个示例代码是学习和理解Java NIO和Reactor模式的好起点。通过分析和运行这段代码,你可以更深入地了解如何在Java中构建高并发、非阻塞的网络服务。不过,为了构建健壮的生产环境应用,你需要进一步完善...
通过阅读博客《Netty--Java IO/NIO 框架 简单学习例子》,你可以了解如何使用 Netty 创建简单的服务器和客户端,以及如何处理网络通信的基本流程。在实际项目中,Netty 的强大功能和易用性使其成为Java网络编程的...
Cindy-3.0b1-src这个版本是Cindy框架的源代码包,对于开发者来说,了解其源码可以帮助深入理解NIO框架的设计原理和实现细节。下面将详细介绍这个框架可能包含的关键知识点: 1. **Java NIO基础**:Cindy是建立在...
Java NIO(New IO)框架是Java平台中用于处理I/O操作的一种非阻塞I/O模型,相较于...通过阅读"Java NIO框架Netty教程.pdf",你可以深入理解Netty的工作原理,并学会如何在实际项目中应用Netty,提升你的网络编程能力。
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
### Netty新NIO框架知识点概述 #### 一、Netty框架简介 Netty是一款高性能的网络应用开发框架,它采用事件驱动的方式处理网络通信,主要用于简化网络编程的复杂度,提升开发效率与系统性能。根据给定文档的描述部分...
基于NIO框架的TeeTime信息平台的设计与实现一文,详细阐述了Java网络应用开发中面临的并发处理问题,并对NIO(New I/O)技术在Java中的应用进行了深入研究。文章首先指出,在Web2.0时代,应用与客户的互动性要求网络...
4. **Buffer**:NIO中的Buffer类是数据存储和传输的主要工具,它提供了高效的数据读写操作,并支持直接内存访问,提高了I/O性能。 5. **Pipeline**:在RS NIO API中,Pipeline可以理解为一种处理链,每个连接都会有...
NIO Netty框架 ...Netty和Mina都是高性能的NIO框架,但Netty具有更好的性能、扩展性和易用性。Netty的 buffer分配方式、事件驱动模型和协议支持使得其在实时数据传输和高性能应用程序中更受欢迎。
Java NIO(New IO)是...6. **异常处理**:学习如何在NIO框架中优雅地处理异常,保证系统的稳定性。 通过深入学习和实践xSocket源码,不仅可以提升Java NIO的技术能力,还可以为将来构建自己的网络框架打下坚实基础。
3. 文档资料:包含了框架的使用指南、API文档以及设计原理等,帮助开发者更好地学习和使用xSocket。 4. 测试用例:验证框架功能的正确性,可作为开发过程中参考和调试的依据。 5. 配置文件:可能包含服务器配置、...
#### NIO框架的设计与优化 - **Reactor模式**:这是一种常见的设计模式,用于实现NIO网络框架。它包含以下核心组件: - **SynchronousEventDemultiplexer**:负责事件循环和事件分离。 - **Dispatcher**:事件...
在Java NIO中,Selector与Channel、Buffer等组件一起,构建了一个强大的非阻塞I/O框架,为开发高性能的网络应用提供了强大的支持。 本教程“Java基础第27天-03.NIO-Selector.avi”应该会详细讲解这些概念,并通过...
它提供了丰富的API,简化了NIO的复杂性,如缓冲区(Buffer)、管道(ChannelHandlerContext)和处理器链(ChannelPipeline)。Netty还支持多种传输类型,如TCP、UDP以及HTTP、WebSocket等协议,使得构建复杂的网络...
在NIO中,所有的I/O操作都是通过Buffer进行的。Buffer具有容量、位置和限制等属性,用于控制数据的读写。 - **Selectors**: Selector用于管理多个Channel,它可以检测一组Channel中的多个Channel的状态变化,如是否...
为了解决上述问题,Java推出了NIO框架,其核心特性包括: - **非阻塞I/O**:允许程序员注册事件回调,而不需要一直阻塞等待I/O操作完成。 - **缓冲区(Buffer)**:用于存储数据,可以减少内存复制次数,提高数据处理...