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. pod 使用详解

    cd 进去到 项目目录 包含 xcodeproj 结尾的目录下 1 pod init 创建一个pod 文件 2 打开生产的pod 文件 然后 配置pod 文件 并保存  3 pod install 安 ...

  2. 【batch】批处理文件多参数处理和for循环字符串连接

    batch文件写起来,酸爽不谈了.[1]今天在github上发现个好东西batsh,运行地址:https://batsh.org/.[1] 这里需求的场景是:调用run.bat脚本并传入多个参数(相对 ...

  3. window 上安装 Scala

    第一步:Java 设置 检测方法前文已说明,这里不再描述. 如果还为安装,可以参考我们的Java 开发环境配置. 接下来,我们可以从 Scala 官网地址 http://www.scala-lang. ...

  4. EasyUI Layout 布局

    1.在整个页面上创建布局(Layout) <!DOCTYPE html> <html> <head> <title>吹泡泡的魚-主页</title ...

  5. laravel 分类的列表查询

    public function index(Request $request, ResponseFactoryContract $response, QuestionModel $questionMo ...

  6. jQuery示例

    <!DOCTYPE html><html lang="en" class="loading"><head> <meta ...

  7. vue :基本语法格式

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Vu ...

  8. 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

  9. python函数系列之sorted()

    一. 有时候需要对List.Dict进行排序 二.用法:sorted(iterable, cmp=None, key=None, reverse=False) 三.参数说明: iterable:是可迭 ...

  10. Linux桌面环境安装matlab并创建快捷方式

    安装matlab sudo mkdir -p /mnt/matlab sudo mount -t auto -o loop /home/chris/Downloads/2016b_linux/R201 ...