zoukankan      html  css  js  c++  java
  • JAVA NIO:Buffer.mark()的用法

    在默认情况下,Buffer.mark()并没有什么用处,既不会影响Buffer的遍历,也不会影响Buffer的位置统计函数,如remaining()函数,能影响这些操作的行为只有position()。

    位置统计示例代码如下:

    CharBuffer buffer = CharBuffer.allocate(10);
    buffer.put('你');
    buffer.put('好');
    //  直接跳转位置
    buffer.position(5);
    //  现在剩余的缓冲区只有5了
    assertThat(buffer.remaining(), IsEqual.equalTo(5));

    位置遍历的代码如下:

    CharBuffer buffer = CharBuffer.allocate(10);
    buffer.put('你');
    buffer.put('好');
    //  不需要mark也可进行遍历,
    buffer.position(0);
    //  遍历数据
    while(buffer.hasRemaining()) {
        System.out.println(buffer.get());
    }

    从上面的两端代码可以看出,无论是遍历还是位置统计都不需要mark()操作,但结合使用reset(),mark()就可以大显身手了:

    CharBuffer buffer = CharBuffer.allocate(10);
    buffer.put('你');
    buffer.put('好');
    //  经过标记后,会持续记住此位置
    buffer.position(0).mark();
    while(buffer.hasRemaining()) {
        System.out.println(buffer.get());
        //  mark将会跳转到上次标记的位置
        buffer.reset();
    }

    所以上述的程序将会持续输出“你”字,并进入无穷循环。

    总结

    把Buffer的函数整理一下,我们发现很多函数都提供了类似的功能,如:

    #   回到第0个位置并标记
    buffer.position(0).mark();
    #   与上述函数的简洁写法
    buffer.flip();
    #   在0位置进行标记,reset也能达到类似的效果
    buffer.reset();
  • 相关阅读:
    第十一周学习总结
    个人冲刺——(六)
    第二阶段冲刺—第二天
    软件工程第十四周总结
    第二阶段冲刺—第一天
    大道至简阅读笔记02
    输入法用户体验评价
    软件工程第十三周总结
    人机交互-水王
    大道至简阅读笔记01
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/9486925.html
Copyright © 2011-2022 走看看