zoukankan      html  css  js  c++  java
  • ByteBuffer flip描述

    # 关于flip
    ByteBuffer 的filp函数, 将缓冲区的终止位置limit设置为当前位置, 缓冲区的游标position(当前位置)重设为0. 
    比如 我们有初始化一个ByteBuffer 后有 
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    这是 终止位置limit在1024, 而起始位置position在 0
    如果我们添加一个数据, 
    buffer.putint(90);
    这会使起始位置 position 移到4, 也就是说postion始终都在第一个可写字节的位置上. limit 则不会发生改变
    而如果这时,我们调用
    buffer.flip();
    position转到0, limit转到 4 也就是原来的position 所在位置
    这里的flip, 从另外一个角度上来说, 是在读数据时,操作的
    然而, 如果我此时在写
    buffer.putInt(90);
    就会将原来的覆盖掉
    如果我们在写, 这时就不行了, 就会重现问题了. 因为我们的limit是4, 我们写入数据不能超过这个limit,(当然还有capacity)
    所以在写的时候,最好先清空buffer.clear();
    如果真的不想清空, 也可以调用 
    buffer.limit(newlimit);
    设置一个较大的limit, 再写入 
    当然不能超过capacity, 可以等于 capacity
  • 相关阅读:
    NOIP前做题记录
    AtCoder Grand Contest 021题解
    AtCoder Grand Contest 020 题解
    CODE FESTIVAL 2017 Final题解
    Code Chef October Challenge 2019题解
    5.20 校内模拟
    5.19 湖南师大附中省选模拟1
    NOI2016 循环之美
    博弈复习
    5.18 省选模拟
  • 原文地址:https://www.cnblogs.com/legend_sun/p/3696748.html
Copyright © 2011-2022 走看看