在Java NIO编程中,对缓冲区操作常常需要使用  java.nio.Buffer中的 flip()方法。

  Buffer 中的 flip() 方法涉及到 Buffer 中的capacity、position、limit三个概念。

  capacity:在读/写模式下都是固定的,就是我们分配的缓冲大小(容量)。

position:类似于读/写指针,表示当前读(写)到什么位置。

limit:在写模式下表示最多能写入多少数据,此时和capacity相同。在读模式下表示最多能读多少数据,此时和缓存中的实际

数据大小相同。

flip():Buffer有两种模式,写模式和读模式。在写模式下调用flip()之后,Buffer从写模式变成读模式。

那么limit就设置成了position当前的值(即当前写了多少数据),postion会被置为0,以表示读操作从缓存的头开始读,mark置为-1。

也就是说调用flip()之后,读/写指针position指到缓冲区头部,并且设置了最多只能读出之前写入的数据长度(而不是整个缓存的容量大小)。

flip()源码:

    public final Buffer flip() {limit = position;position = 0;mark = -1;return this;}

实例代码(借用Java编程思想P552的代码):

package cn.com.newcom.ch18;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;/*** 获取通道* * @author zhq* */
public class GetChannel {private static final int SIZE = 1024;public static void main(String[] args) throws Exception {// 获取通道,该通道允许写操作FileChannel fc = new FileOutputStream("data.txt").getChannel();// 将字节数组包装到缓冲区中fc.write(ByteBuffer.wrap("Some text".getBytes()));// 关闭通道fc.close();// 随机读写文件流创建的管道fc = new RandomAccessFile("data.txt", "rw").getChannel();// fc.position()计算从文件的开始到当前位置之间的字节数System.out.println("此通道的文件位置:" + fc.position());// 设置此通道的文件位置,fc.size()此通道的文件的当前大小,该条语句执行后,通道位置处于文件的末尾fc.position(fc.size());// 在文件末尾写入字节fc.write(ByteBuffer.wrap("Some more".getBytes()));fc.close();// 用通道读取文件fc = new FileInputStream("data.txt").getChannel();ByteBuffer buffer = ByteBuffer.allocate(SIZE);// 将文件内容读到指定的缓冲区中fc.read(buffer);buffer.flip();// 此行语句一定要有while (buffer.hasRemaining()) {System.out.print((char) buffer.get());}fc.close();}
}

  注意:buffer.flip();一定得有,如果没有,就是从文件最后开始读取的,当然读出来的都是byte=0时候的字符。通过buffer.flip();这个语句,就能把buffer的当前位置更改为buffer缓冲区的第一个位置。

java.nio.Buffer 中的 flip()方法相关推荐

  1. java.nio.Buffer flip()方法

    碰到java.nio.Buffer flip()方法,不明白是干什么用的,于是就赶快查看中文API,API上面翻译的是:"反转此缓冲区.首先对当前位置设置限制,然后将该位置设置为零.如果已定 ...

  2. java.nio.ByteBuffer中flip、rewind、clear方法的区别

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

  3. [转] java.nio.ByteBuffer中flip、rewind、clear方法的区别

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

  4. java nio.Buffer的属性变化

    java nio.Buffer的属性变化 认识Buffer Channel 提供从文件.网络读取数据的渠道,但是读取或写入的数据都必须经由 Buffer.Buffer,实际上是一个连续数组. 常用的 ...

  5. java string.substring 参数,Java,String类中的subString()方法,stringsubstring

    Java,String类中的subString()方法,stringsubstring public class TestStringSubString { // main函数 public stat ...

  6. Buffer中的split方法分析

    Buffer中的split方法分析 Buffer中存在indexOf,slice,split方法,前两者可以直接使用,而split方法需要进行造轮子才可以使用,分析如下 输出 Buffer中存在ind ...

  7. java settitle_关于java的JFrame中的setTitle()方法

    展开全部 java的JFrame中使用setTitle()方法设置窗体的标题: 下面是一个计算器的例子: import java.awt.BorderLayout; import java.awt.D ...

  8. java nio rewind_java.nio.ByteBuffer中的flip()、rewind()、compact()等方法的使用和区别

    java.nio.ByteBuffer 1. ByteBuffer中的参数position.limit.capacity.mark含义: position:表示当前指针的位置(下一个要操作的数据元素的 ...

  9. Java NIO ———— Buffer 缓冲区详解

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

最新文章

  1. python 配置文件对比_difflib模块对比apache配置文件差异
  2. Java 多线程(一) 基础知识与概念
  3. IIS集成模式和经典模式 系统部署的不同
  4. 五分钟的JShell
  5. 南充一中计算机机房被盗,成都理工大学与南充市第一中学共建优质生源基地
  6. 系统什么时候会执行adapter的getview函数
  7. java 当前时间格式_JAVA中获取当前系统时间及格式转换
  8. 未来 10 年,物联网将成为主流!
  9. 【转载】煤层气大事记
  10. Rust : 独一无二的Some
  11. 财务人员必备的5个Excel技能,学会工资高出同事3倍!
  12. itext java代码生成PDF文档
  13. Linux ls -l 各字段解释,硬链接软连接
  14. linux关闭firefox进程,Firefox 68+ 怎样关闭多进程
  15. VS Code 多光标快捷键
  16. CSS简介代码实现表格(table)只有横线没有竖线的效果,一个简约卡片化精美的数据表格(类似Bootstrap表格)
  17. 数字电路技术可能出现的简答题_电子技术应用实验1(数字电路基础实验)答案公众号...
  18. 基于站点休眠的中继网络动态节能拓扑控制
  19. vue-barcode生成条形码
  20. 开源办公OA平台教程:SmartBI集成版快速部署及使用(O2OA容器化部署)

热门文章

  1. border on用法
  2. UPC新生训练赛32场
  3. 基于LD3320的语音识别模块LD-V7使用记录
  4. 百度云管家加速补丁:可一直使用高速下载
  5. 有规划的人生才能更成功
  6. mavlink协议详解_无人机通信协议mavlink资料汇总
  7. php面向对象笔试题,php练习笔试题
  8. 导航中姿态角与欧拉角的联系
  9. CG-CTF——WP(WEB[一])
  10. 用虚拟机安装 红旗Linux 系统图解