成都有做网站的公司吗,个人网站取什么域名好,网站建设熊掌号,谷歌浏览器下载安卓版❃博主首页 #xff1a; 「码到三十五」 #xff0c;同名公众号 :「码到三十五」#xff0c;wx号 : 「liwu0213」 ☠博主专栏 #xff1a; mysql高手 elasticsearch高手 源码解读 java核心 面试攻关 ♝博主的话 #xff1a… ❃博主首页 「码到三十五」 同名公众号 :「码到三十五」wx号 : 「liwu0213」 ☠博主专栏 mysql高手 elasticsearch高手 源码解读 java核心 面试攻关 ♝博主的话 搬的每块砖皆为峰峦之基公众号搜索「码到三十五」关注这个爱发技术干货的coder一起筑基 在Java NIONew I/O中Buffer是一个重要的组件它作为数据的容器主要用于数据的读写操作。Buffer本质上是一个内存块可以写入数据也可以从中读取数据。
Buffer的基本概念
Buffer是一个抽象类对应于Java的主要数据类型在NIO中有8种缓冲区类分别是ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer和MappedByteBuffer。这些不同的Buffer子类对应于Java的主要数据类型每种子类能操作的数据类型可以通过名称进行判断。
Buffer的主要类型
ByteBuffer用于字节数据的读写。CharBuffer用于字符数据的读写。DoubleBuffer用于双精度浮点数数据的读写。FloatBuffer用于单精度浮点数数据的读写。IntBuffer用于整数数据的读写。LongBuffer用于长整数数据的读写。ShortBuffer用于短整数数据的读写。MappedByteBuffer用于映射文件区域的读写。
Buffer的关键属性
容量Capacity表示Buffer的最大数据容量一旦初始化就不能改变。位置Position表示下一个要被读或写的元素的索引。它的值由get( )和put( )函数自动更新。限制Limit表示第一个不应该读或写的元素的索引。在写模式下limit等于Buffer的capacity在读模式下limit表示最多能从缓冲区中读取到多少数据。
Buffer中数据读写操作的基本流程 写入数据通过调用Buffer的put( )方法向Buffer中写入数据。数据会被写入到position指针所指向的位置并且position指针会向前移动。如果需要写入大量数据可以使用Buffer的bulk put( )方法提高写入效率。 读取数据通过调用Buffer的get( )方法从Buffer中读取数据。数据会被读取到position指针所指向的位置并且position指针会向前移动。同样地如果需要读取大量数据可以使用Buffer的bulk get( )方法提高读取效率。 重置position如果需要重新读取已读过的数据可以使用mark( )方法设置一个标记然后调用reset( )方法将position重置为mark的值。 清除Buffer如果需要清除Buffer中的数据可以使用clear( )方法将position和limit都设置为0同时将capacity保持不变。如果需要将Buffer中的数据全部置为某个值可以使用flip( )方法将limit设置为position之前的值然后将position设置为0。
Java NIO Buffer相关类的使用示例
下面是一个使用ByteBuffer的示例演示了如何向Buffer中写入数据并读取它们
// 创建一个ByteBuffer对象初始容量为10
ByteBuffer buffer ByteBuffer.allocate(10);// 写入数据
for (int i 0; i 5; i) {buffer.put((byte) i);
}// 切换到读模式
buffer.flip();// 读取数据
while (buffer.hasRemaining()) {byte b buffer.get();System.out.print(b );
}在这个示例中我们首先创建了一个容量为10的ByteBuffer对象。然后通过调用put( )方法向Buffer中写入了5个字节的数据。接下来调用flip( )方法将Buffer切换到读模式并通过get( )方法从Buffer中读取数据直到没有剩余数据为止。 关注公众号[码到三十五]获取更多技术干货 !