`
tan4836128
  • 浏览: 27268 次
  • 性别: 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

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

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

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

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

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

    NULL 博文链接:https://chinaestone.iteye.com/blog/468138

    Java NIO学习笔记——ByteBuffer用法

    NULL 博文链接:https://zheng12tian.iteye.com/blog/1094811

    io+nio拷贝及nio按行读取

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

    Mina 文档doc

    • Multipurpose ...MINA没有直接使用使用java NIO的ByteBuffer类。它使用一个自制的ByteBuffer来扩展java。如果你使用MINA,你将不需要直接使用NIO buffers,因为仅使用MINA buffers就可以完成大多数buffer操作

    Android在JNI中使用ByteBuffer的方法

    在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区) 缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型。...

    关于apache Mina Server

    深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个...深入理解Apache_Mina_(6)----_Java_Nio_ByteBuffer与Mina_ByteBuffer的区别(类图) 相信你们也愿意去下载更有价值的东西

    NIO实现多用户聊天demo,通过demo深入理解NIO三大组件:buffer、channel、selector

    目录运行效果截图:源代码:Server端:Client端:使用时注意:(持续更新) 运行效果截图: 启动server端: ...import java.nio.ByteBuffer; import java.nio.channels.Channel; import java.nio.c

    使用NIO完成一个客户端和服务端

    import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.util.Scanner; /** * 符合TCP协议,非阻塞IO NIO完成对应的客户端代码 * @Author kk * @Date 2020/3/16 15:10 */ public cl

    Java-NIO-Programming-Cookbook(含源码)

    Java-NIO-Programming-Cookbook英文版和配套源代码。有一个使用DirectByteBuffer和Non-Direct Buffer文件读取速度的对比实验程序和测试结果。

    javasnmp源码-nio-learn:JavaNIO使用示例,NIO的使用,TCP,UDP的简单示例

    Buffer是数据的容器,在nio中负责数据的存取,java为不同数据类型提供了相对应的缓冲区类型 如:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 、DoubleBuffer 等。 Buffer的基本使用 ...

    易语言汇编版ByteBuffer-易语言

    http://docs.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html 主要用于各种网络协议的组包具体用法可以点上面的网址功能和jAVA的一样

    Java NIO 聊天室 JSwing

    import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.Iterator; import com.nio.user.ClientUser...

    test_surface_test_

    import java.nio.ByteBuffer;import android.app.Activity;import android.media.MediaCodec;import android.media.MediaCodec.BufferInfo;import android.media.MediaCodecInfo;import android.media....

    java.nio API详解

    在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API。...从JDK 1.4起,NIO API作为一个基于缓冲区,并能提供异步(non-blocking)IO操作的API被引入。本文对其进行深入的介绍。

    nio_stream_parse_json:在NIO的环境里如何解析json

    nio_stream_parse_json 在NIO的环境里如何解析json 场景: 在一些nio的网络框架, 比如netty, mina等, 读取数据时异步的, 也就是不能通过InputStream.read来以阻塞的方式读取数据. 而大多数json的库, 如FastJSON, ...

    反向播放wav声音文件

    用java.nio.ByteBuffer类实现音频的反向播放,这个可以让你感觉时光倒流时我们能听到的声音。 举个例子:假如你说了句话“我爱你!”,时光倒回的话就是“!你爱我”,很有意思哦 体验下吧! 你会发现那些明星那么...

    yubo-java-nio:java nio的学习项目

    yubo-java-nioNIO 直接缓冲区 VS 非直接缓冲区直接缓冲区1、直接... Scatter/Gather 应该与直接 ByteBuffer 一起使用,以从本机 I/O 中获得最大优势。Java 引用对象类型1、JCP java并发实践JCP AQS - 抽象排队同步器

Global site tag (gtag.js) - Google Analytics