rewind()

rewind()方法将position置0,清除mark,它的作用在于为提取Buffer的有效数据做准备。

        ByteBuffer byteBuf = ByteBuffer.allocate(8);
byteBuf.put("hello".getBytes());
byteBuf.rewind(); // #1
while (byteBuf.hasRemaining()) { //是否还有剩余的元素,即position<limit
System.out.print(byteBuf.get() + ","); // 打印出各个字符的ASCII码值,104,101,108,108,111,0,0,0,
}

在#1处,rewind前和rewind后的示意图如下所示

     ----->     

clear()

clear()方法将position置0,清除mark,与rewind()方法不同的是,它还会将limit置为capacity的大小,这个方法用于“清空”缓冲区。

注意,清空打上了引号,因为它的作用仅仅是将position、limit等这些标志位复原,并非清空了真实的数据

        ByteBuffer byteBuf = ByteBuffer.allocate(8);
byteBuf.put("hello".getBytes());
byteBuf.limit(5);
byteBuf.clear(); // #1 清空缓冲区
while (byteBuf.hasRemaining()) { //是否还有剩余的元素,即position<limit
System.out.print(byteBuf.get() + ","); // 表现的和上面一样,打印出各个字符的ASCII码值,104,101,108,108,111,0,0,0,
}

在#1处,clear前和clear后的示意图如下所示

    ------>   

flip()

flip()方法将position置0,清除mark,然后将limit置为position的大小,通常在读写转换时使用。

        ByteBuffer byteBuf = ByteBuffer.allocate(8);
byteBuf.put("hello".getBytes());
byteBuf.flip(); //#1 position置为limit
while (byteBuf.hasRemaining()) { //是否还有剩余的元素,即position<limit
System.out.print(byteBuf.get() + ","); // 仅打印出"hello"的ASCII码值,104,101,108,108,111,
}

在#1处,flip前和flip后的示意图如下所示

 -----> 

NIO缓冲区基本操作:rewind(),clear(),flip()的更多相关文章

  1. NIO之Buffer的clear()、rewind()、flip()方法的区别

    Java的NIO中有关Buffer的几种常用方法比如clear,rewind和flip到底有哪些区别.下面给大家这三种方法的源码,方便大家记忆.clear()方法用于写模式,其作用为情况Buffer中 ...

  2. java nio 缓冲区(一)

      本文来自于我的个人博客:java nio 缓冲区(一) 我们以Buffer类開始对java.nio包的浏览历程.这些类是java.nio的构造基础. 这个系列中,我们将尾随<java NIO ...

  3. Java NIO 缓冲区

    Java NIO 在JDK1.4的时候引入,主要解决传统IO的一些性能问题.NIO 主要内容包含 Buffer .Channel.Selector等内容,本文主要讲解Buffer相关的内容. Buff ...

  4. java.nio.ByteBuffer中flip,rewind,clear方法的区别

    对缓冲区的读写操作首先要知道缓冲区的下限.上限和当前位置.下面这些变量的值对Buffer类中的某些操作有着至关重要的作用: limit:所有对Buffer读写操作都会以limit变量的值作为上限. p ...

  5. Java NIO -- 缓冲区(Buffer)的数据存取

    缓冲区(Buffer): 一个用于特定基本数据类型的容器.由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类.Java NIO 中的 Buffer 主要用于与 NIO 通道进行 ...

  6. JAVA NIO缓冲区(Buffer)------ByteBuffer常用方法

    参考:https://blog.csdn.net/xialong_927/article/details/81044759 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I ...

  7. Java NIO 缓冲区 Buffer

    缓冲区 Buffer 是 Java NIO 中一个核心概念,它是一个线性结构,容量有限,存放原始类型数据(boolean 除外)的容器. 1. Buffer 中可以存放的数据类型 java.nio.B ...

  8. Netty精粹之玩转NIO缓冲区

    摘要: 在JAVA NIO相关的组件中,ByteBuffer是除了Selector.Channel之外的另一个很重要的组件,它是直接和Channel打交道的缓冲区,通常场景或是从ByteBuffer写 ...

  9. java nio 缓冲区读写数据(图形详解)

    Position 您可以回想一下,缓冲区实际上就是美化了的数组.在从通道读取时,您将所读取的数据放到底层的数组中. position 变量跟踪已经写了多少数据.更准确地说,它指定了下一个字节将放到数组 ...

随机推荐

  1. Confluence 6 创建一个主题

    如果你希望创建你自己的主题,你需要写一个 Confluence 插件.请参考我们开发文档中的下面页面 开始使用 插件开发. 请参考开发者指南的页面来 写一个 Confluence 主题. 使用 主题插 ...

  2. SQLmap注入启发式检测算法

    1.经过setTargetEnv()就进入了checkWaf()的环节 def checkWaf():     """     Reference: http://sec ...

  3. CF1121C 模拟

    恶心场恶心题,,round千万不能用库函数的.. /*枚举时间轴t,r是当前完成比例, 记录每个测试的开始时间si,如果有t-si等于r,那么这个测试就标记一下 优先队列存储每个测试,按照si+ai的 ...

  4. 官方版sublime Text3汉化和激活注册码

    转载:https://www.cnblogs.com/chaonuanxi/p/9371837.html sublimeText3 很不错,前面几天下了vscore学习Node.js,感觉有点懵,今天 ...

  5. 线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置

    top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理 ...

  6. String 类的实现(3)String类常用函数

      2 #include<iostream> 3 #include<stdio.h> 4 #include<assert.h> 5 #include <iom ...

  7. 提取Word里的文本内容 C#

    using DocumentFormat.OpenXml.Packaging; public static string TextFromWord(string path) { const strin ...

  8. 如果IDEA右上角的tomcat消失了,解决办法

    看了很多博客都没有找到解决办法,还是老师帮我解决的

  9. [转] 深入浅出mongoose-----包括mongoose基本所有操作,非常实用!!!!!

    深入浅出mongoose mongoose是nodeJS提供连接 mongodb的一个库. 此外还有mongoskin, mongodb(mongodb官方出品). 本人,还是比较青睐mongoose ...

  10. js 给定时间,如'2013-08-30',换算和今天的天数差

    由于项目中需要用到给定时间格式,如'2013-08-30',需要计算其和当前时间的间隔,需要算出间隔的时间,自己在网上搜索,并做了下简单的整理,总体思路分3步:1.将给定的时间和当前时间转换为毫秒 2 ...