「java中flip」java中M

博主:adminadmin 2022-11-30 18:30:08 188

今天给各位分享java中flip的知识,其中也会对java中M进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中filp的的使用方法。

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

谁能帮我解释下java的NIO包中ByteBuffer类的clear(),flip(),rewind()方法的意思,这些方法有什么作用?

首先澄清一点:这三个方法都是ByteBuffer的抽象基类Buffer定义的方法,ByteBuffer只是继承了它们。

****************************************************

其次,你要理解缓冲区的概念,就是Buffer的意义:缓冲区是特定基本类型元素的线性有限序列。除内容外,缓冲区的基本属性还包括容量、限制和位置:

缓冲区的容量 是它所包含的元素的数量。缓冲区的容量不能为负并且不能更改。

缓冲区的限制 是第一个不应该读取或写入的元素的索引。缓冲区的限制不能为负,并且不能大于其容量。

缓冲区的位置 是下一个要读取或写入的元素的索引。缓冲区的位置不能为负,并且不能大于其限制。

任何插入或读取都不能超出限制。

标记、位置、限制和容量值遵守以下不变式:

0 = 标记 = 位置 = 限制 = 容量

新创建的缓冲区总有一个 0 位置和一个未定义的标记。初始限制可以为 0,也可以为其他值,这取决于缓冲区类型及其构建方式。一般情况下,缓冲区的初始内容是未定义的。

******************************************************

clear() 使缓冲区为一系列新的通道读取或相对放置 操作做好准备:它将限制设置为容量大小,将位置设置为 0。

通道读取指从通道将数据读入到buffer中,相对放置是从位置开始将数据插入到buffer中

flip() 使缓冲区为一系列新的通道写入或相对获取 操作做好准备:它将限制设置为当前位置,然后将位置设置为 0。

把限制设置为当前位置是为了保证数据的可靠性。让从buffer写入到通道的数据是buffer中确实是已经存在的数据。

rewind() 使缓冲区为重新读取已包含的数据做好准备:它使限制保持不变,将位置设置为 0。

和clear()类似,只是不改动限制

这三个方法在源码上就对缓冲区的数据不进行任何修改

java!开发一个标题为”FlipFlop”的游戏应用程序。它从1计数到100,遇到3的倍数就输出单词”Flip”,

for(int i = 1 ; i 100 ; i++){

if(i % 3 == 0){

System.out.print("Flip");

}else( i % 5 == 0){

System.out.print("Flop");

}

System.out.println("");//跳行

}

java 中怎么创建 bytebuffer

ByteBuffer定义了4个static方法来做创建工作:

ByteBuffer allocate(int capacity) //创建一个指定capacity的ByteBuffer。

ByteBuffer allocateDirect(int capacity) //创建一个direct的ByteBuffer,这样的ByteBuffer在参与IO操作时性能会更好

ByteBuffer wrap(byte [] array)

ByteBuffer wrap(byte [] array, int offset, int length) //把一个byte数组或byte数组的一部分包装成ByteBuffer。

一个使用ByteBuffer的例子,这个例子从标准输入不停地读入字符,当读满一行后,将收集的字符

写到标准输出:

 public static void main(String [] args)

       throws IOException

    {

       // 创建一个capacity为256的ByteBuffer

       ByteBuffer buf = ByteBuffer.allocate(256);

       while (true) {

           // 从标准输入流读入一个字符

           int c = System.in.read();

           // 当读到输入流结束时,退出循环

           if (c == -1)

              break;

           // 把读入的字符写入ByteBuffer中

           buf.put((byte) c);

           // 当读完一行时,输出收集的字符

           if (c == '\n') {

              // 调用flip()使limit变为当前的position的值,position变为0,

              // 为接下来从ByteBuffer读取做准备

              buf.flip();

              // 构建一个byte数组

              byte [] content = new byte[buf.limit()];

              // 从ByteBuffer中读取数据到byte数组中

              buf.get(content);

               // 把byte数组的内容写到标准输出

              System.out.print(new String(content));

              // 调用clear()使position变为0,limit变为capacity的值,

              // 为接下来写入数据到ByteBuffer中做准备

              buf.clear();

           }

      }

    }

java的flip(). 这里用flip()有什么作用?这是反转缓冲区的方法,好像用不上。

flip的作用有两个:

1. 把limit设置为当前的position值

2. 把position设置为0

然后处理的数据就是从position到limit直接的数据,也就是你刚刚读取过来的数据

关于java中flip和java中M的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。