您好,欢迎来到年旅网。
搜索
您的当前位置:首页java.nio.Buffer 中的 flip()方法

java.nio.Buffer 中的 flip()方法

来源:年旅网

java.nio.Buffer 中的 flip()方法

2016年11月11日 16:29:15  阅读数:9113 标签: 更多

个人分类: 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https:///hbtj_1216/article/details/53129588

在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()源码:

 


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

 

 
  1. package cn.com.newcom.ch18;

  2.  
  3. import java.io.FileInputStream;

  4. import java.io.FileOutputStream;

  5. import java.io.RandomAccessFile;

  6. import java.nio.ByteBuffer;

  7. import java.nio.channels.FileChannel;

  8.  
  9. /**

  10. * 获取通道

  11. *

  12. * @author zhq

  13. *

  14. */

  15. public class GetChannel {

  16. private static final int SIZE = 1024;

  17.  
  18. public static void main(String[] args) throws Exception {

  19. // 获取通道,该通道允许写操作

  20. FileChannel fc = new FileOutputStream("data.txt").getChannel();

  21. // 将字节数组包装到缓冲区中

  22. fc.write(ByteBuffer.wrap("Some text".getBytes()));

  23. // 关闭通道

  24. fc.close();

  25.  
  26. // 随机读写文件流创建的管道

  27. fc = new RandomAccessFile("data.txt", "rw").getChannel();

  28. // fc.position()计算从文件的开始到当前位置之间的字节数

  29. System.out.println("此通道的文件位置:" + fc.position());

  30. // 设置此通道的文件位置,fc.size()此通道的文件的当前大小,该条语句执行后,通道位置处于文件的末尾

  31. fc.position(fc.size());

  32. // 在文件末尾写入字节

  33. fc.write(ByteBuffer.wrap("Some more".getBytes()));

  34. fc.close();

  35.  
  36. // 用通道读取文件

  37. fc = new FileInputStream("data.txt").getChannel();

  38. ByteBuffer buffer = ByteBuffer.allocate(SIZE);

  39. // 将文件内容读到指定的缓冲区中

  40. fc.read(buffer);

  41. buffer.flip();// 此行语句一定要有

  42. while (buffer.hasRemaining()) {

  43. System.out.print((char) buffer.get());

  44. }

  45. fc.close();

  46. }

  47. }

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

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务