`
tan4836128
  • 浏览: 27760 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

NIO中的ByteBuffer

阅读更多
关于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)按行读取文件

    使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com

    深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

    本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...

    Java NIO学习笔记——ByteBuffer用法

    本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)和缓冲区(Buffer)之间传输数据。ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。...

    JAVA NIO 按行读取大文件支持 GB级别-修正版

    设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 ...

    netty相关源码1

    在 Netty 中,ByteBuf 是一个高效且灵活的字节缓冲区,它解决了 Java NIO 中 ByteBuffer 的一些限制和不便。 首先,让我们深入理解 ByteBuffer 的局限性: 1. 固定长度:ByteBuffer 在创建时分配了固定的容量,一旦...

    Chronicle-Bytes:Chronicle Bytes具有与Java NIO的ByteBuffer类似的用途,具有许多扩展

    Chronicle Bytes具有与Java NIO的ByteBuffer类似的用途,但具有一些扩展。 API支持。 64位大小 UTF-8和ISO-8859-1编码的字符串。 线程安全关闭堆内存操作。 通过引用计数确定性地释放资源。 压缩数据类型,...

    Android中的ByteBuffer解析

    ByteBuffer是Java NIO(Non-Blocking I/O)的一部分,允许开发者高效地读写大量原始字节,如处理图像、音频或网络数据。本文将深入探讨Android中ByteBuffer的工作原理及其常见应用场景。 一、ByteBuffer的基础概念 ...

    NIO复制文件

    2. **ByteBuffer**:`java.nio.ByteBuffer`是NIO中最重要的缓冲区类型,它可以被映射到文件,也可以作为网络I/O的数据容器。在复制文件时,我们用它来存储从源文件读取或写入目标文件的数据。 下面是一个简单的文件...

    Android开发进阶之NIO非阻塞包[定义].pdf

    在Android中,NIO的主要类别包括ByteBuffer、FileChannel和SocketChannel。ByteBuffer是NIO的核心,它是用来存储和传输数据的缓冲区。它提供了一系列方法用于数据的读写,并且支持多种数据类型,如DoubleBuffer、...

    java nio 读文件

    在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如何用于写文件,特别是在处理大数据文件时如何提高性能。 首先,理解Java NIO的基本概念非常重要。NIO中的“N”代表“非阻塞”,这意味着在进行I/O操作时,程序可以继续执行...

    Java NIO 中英文版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准的I/O模型的一种新机制。在传统的Java I/O中,使用的是Blocking I/O,即阻塞式I/O,这种模型下,线程在等待数据就绪时会被...

    NIO 入门.chm,NIO 入门.chm

    例如,从文件读取数据时,会先将数据读入到ByteBuffer,然后再从ByteBuffer中读取数据;写入文件时,先将数据写入到ByteBuffer,然后通过FileChannel将数据写入文件。 8. **聚合操作(Scatter/Gather)**:NIO支持...

    NIO项目源码.zip

    - `java.nio.ByteBuffer`:最常见的缓冲区类型,用于处理字节数据。 - `java.nio.channels.Selector`:选择器用于注册感兴趣的事件,并进行轮询以检测就绪的通道。 - `java.nio.channels.SelectionKey`:每个已...

    自己写的Java NIO 同步不阻塞IO操作

    Java NIO(New Input/Output)是Java标准...可能包含了上述提到的ServerSocketChannel、SocketChannel、Selector和ByteBuffer的使用示例,通过阅读和分析这个文件,你可以更深入地理解Java NIO在实际应用中的工作方式。

    动态演示nio中的buffer相关操作.zip

    1. **缓冲区类型**:Java NIO提供了多种Buffer类型,如ByteBuffer、CharBuffer、IntBuffer、FloatBuffer、DoubleBuffer等,分别对应于不同数据类型。它们都是抽象类`Buffer`的子类。 2. **缓冲区的基本属性**: - ...

    nio演示代码

    在这个例子中,我们首先打开一个文件通道,然后创建一个ByteBuffer并从文件通道中读取数据。当缓冲区满时,我们反转缓冲区以读取数据,然后清空缓冲区以接收更多的数据。这个过程一直持续到文件读取完毕。 通过以上...

    io+nio拷贝及nio按行读取

    使用 io和nio 各个方式进行文件拷贝;...使用nio+byteBuffer 实现按行读取文件(大文件),在window/linux/macOS上均测试通过,对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com

Global site tag (gtag.js) - Google Analytics