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

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

大家好,又见面了,我是全栈君。

1.flip()方法用来将缓冲区准备为数据传出状态,这通过将limit设置为position的当前值,再将 position的值设为0来实现:

后续的get()/write()调用将从缓冲区的第一个元素开始检索数据,直到到达limit指示的位置。下面是使用flip()方法的例子:

// ... put data in buffer with put() or read() ...


buffer.flip(); // Set position to 0, limit to old position
while (buffer.hasRemaining()) 
// Write buffer data from the first element up to limit
channel.write(buffer);

2. flip()源码:

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

3.


实例代码(借用Java编程思想P552的代码): 
[java] view plain copy print?
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缓冲区的第一个位置。

转载于:https://my.oschina.net/u/2263272/blog/1556275

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108085.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 秒杀多线程第一篇 多线程笔试面试题汇总

    系列前言   本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”。有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题。              ————-

  • 走进云时代_怎么跟上时代的脚步

    走进云时代_怎么跟上时代的脚步如何跟上时代的步伐进入云世界

  • FlashFXP 4.3.1 注册码

    FlashFXP 4.3.1 注册码FlashFXP4.3.1注册码——–start———FLASHFXPwQAOlhkgwQAAAAC6W5MNJwTnsl73nIraAU149tnCQS0hmZU3GGBQG1FtoSp5x0mUgA7bFW0qr0fKk2KCA+v2CCrFbF+qbmLvEjV+4JCAX+H/TBpG7pdEJ8IEW09ST8t60Poou/CTNhxGoz1Ww0ki…

  • webpack版本问题「建议收藏」

    webpack版本问题「建议收藏」由于webpack版本较多,而且配置写法,每个版本都大大小小有差异,因版本问题造成的错误很多1下载指定版本我常用的版本3.3.0,2不同版本中的坑2.1在3.0之后版本配置entry和output路劲不再支持相对路径只能使用__dirname拼接成的绝对路径)varpath=require(‘path’);path.join(__dirname,”)2.2在版本4之后…

  • Robotium体验—-白盒

    Robotium体验—-白盒什么是Robotium?先说一下发音。音标类似于[rəʊbɒʃɪəm],可参照有道。Robotium是一款开源测试框架,官方定义为AndroidApp的黑盒测试框架(官方示例为白盒),适用于native/hybridapp。由于开源,该框架源码可以从github上获取,地址为https://github.com/RobotiumTech/robotium。若需要文档,j…

  • vdbench的作用_vdbench

    vdbench的作用_vdbench一、vdbench安装1、安装java:java-version(vdbench的运行依赖于java)2、检测vdbench能够使用:进入vdbench相应目录下./vdbench-t来测试一下vdbench的可用性,如果正常,会在目录下自动生成一个output目录。root@node1:/home/vdbench/vdbench50406#./vdbench-t如果报错,则需修改vdb…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号