关于Java中的NIO,网上很多资料,关于ByteBuffer类也有很多内容,这里要说的是clear、flip、rewind三个方法的区别和对应缓冲区的状态。
ByteBuffer类没有构造方法,只能通过ByteBuffer.allocate(int)来分配一个新的字节缓冲区
下面我用图片展示不同状态下缓冲区,图中管道即操作缓冲区的IO流
这里需要明白以下几个术语的含义:
缓冲区容量:capacity
限制:limit
位置:position
标记:mark
初始化和clear方法执行后的缓冲区状态,如下:
clear方法作用是清空缓冲区,设置位置为0,限制=容量,并取消标记,其源码如下:
public final Buffer clear() {
position = 0; //设置为0
limit = capacity; //极限和容量相同
mark = -1; //取消标记
return this;
}
准备读取或读取中的缓冲区状态,如下:
flip方法执行后的缓冲区状态,如下:
flip方法设置位置为0,限制=位置,并取消标记,其源码如下:
public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
rewind方法执行后的缓冲区状态,如下:
rewind方法设置位置为0,限制不变,并取消标记,其源码如下:
public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
分享到:
相关推荐
使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...
本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)和缓冲区(Buffer)之间传输数据。ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。...
设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 ...
在 Netty 中,ByteBuf 是一个高效且灵活的字节缓冲区,它解决了 Java NIO 中 ByteBuffer 的一些限制和不便。 首先,让我们深入理解 ByteBuffer 的局限性: 1. 固定长度:ByteBuffer 在创建时分配了固定的容量,一旦...
Chronicle Bytes具有与Java NIO的ByteBuffer类似的用途,但具有一些扩展。 API支持。 64位大小 UTF-8和ISO-8859-1编码的字符串。 线程安全关闭堆内存操作。 通过引用计数确定性地释放资源。 压缩数据类型,...
ByteBuffer是Java NIO(Non-Blocking I/O)的一部分,允许开发者高效地读写大量原始字节,如处理图像、音频或网络数据。本文将深入探讨Android中ByteBuffer的工作原理及其常见应用场景。 一、ByteBuffer的基础概念 ...
2. **ByteBuffer**:`java.nio.ByteBuffer`是NIO中最重要的缓冲区类型,它可以被映射到文件,也可以作为网络I/O的数据容器。在复制文件时,我们用它来存储从源文件读取或写入目标文件的数据。 下面是一个简单的文件...
在Android中,NIO的主要类别包括ByteBuffer、FileChannel和SocketChannel。ByteBuffer是NIO的核心,它是用来存储和传输数据的缓冲区。它提供了一系列方法用于数据的读写,并且支持多种数据类型,如DoubleBuffer、...
`java.nio.ByteBuffer`是Java NIO中的一个核心类,它主要用于处理字节数据的读写操作。`ByteBuffer`继承自抽象类`Buffer`,并且实现了`Comparable<ByteBuffer>`接口。这使得`ByteBuffer`不仅可以用于数据的存储和...
在Java NIO中,读取文件主要涉及FileChannel和ByteBuffer。以下是一个简单的示例: ```java import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio....
在这个主题中,我们将深入探讨Java NIO如何用于写文件,特别是在处理大数据文件时如何提高性能。 首先,理解Java NIO的基本概念非常重要。NIO中的“N”代表“非阻塞”,这意味着在进行I/O操作时,程序可以继续执行...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准的I/O模型的一种新机制。在传统的Java I/O中,使用的是Blocking I/O,即阻塞式I/O,这种模型下,线程在等待数据就绪时会被...
例如,从文件读取数据时,会先将数据读入到ByteBuffer,然后再从ByteBuffer中读取数据;写入文件时,先将数据写入到ByteBuffer,然后通过FileChannel将数据写入文件。 8. **聚合操作(Scatter/Gather)**:NIO支持...
- `java.nio.ByteBuffer`:最常见的缓冲区类型,用于处理字节数据。 - `java.nio.channels.Selector`:选择器用于注册感兴趣的事件,并进行轮询以检测就绪的通道。 - `java.nio.channels.SelectionKey`:每个已...
Java NIO(New Input/Output)是Java标准...可能包含了上述提到的ServerSocketChannel、SocketChannel、Selector和ByteBuffer的使用示例,通过阅读和分析这个文件,你可以更深入地理解Java NIO在实际应用中的工作方式。
1. **缓冲区类型**:Java NIO提供了多种Buffer类型,如ByteBuffer、CharBuffer、IntBuffer、FloatBuffer、DoubleBuffer等,分别对应于不同数据类型。它们都是抽象类`Buffer`的子类。 2. **缓冲区的基本属性**: - ...
在这个例子中,我们首先打开一个文件通道,然后创建一个ByteBuffer并从文件通道中读取数据。当缓冲区满时,我们反转缓冲区以读取数据,然后清空缓冲区以接收更多的数据。这个过程一直持续到文件读取完毕。 通过以上...