关于ByteBuffer中flip和rewind方法的作用说明

        关于flip,看到JDK的文档大概是这么说的:“将limit属性设置为当前的位置”;而关于rewind方法,是在limit属性已经被设置合适的情况下使用的。也就是说这两个方法虽然都能够使指针返回到缓冲区的第一个位置,但是flip在调整指针之前,将limit属性设置为当前位置。

        以下程序可以验证:

package com.bijian.study;

import java.nio.*;

public class IntBufferDemo {

    /**
    * @param args
    */
    private static final int BSIZE = 1024;

    public static void main(String[] args) {

        ByteBuffer bb = ByteBuffer.allocate(BSIZE);
        IntBuffer ib = bb.asIntBuffer(); // view buffer

        // 存储int的数组
        ib.put(new int[] { 11, 42, 47, 99, 143, 811, 1016 });

        // 绝对位置读写
        //System.out.println(ib.get(3));

        System.out.println("*******************************");
        System.out.println(ib.limit());
        ib.put(3, 1811);
        ib.flip();
        //ib.rewind();
        System.out.println(ib.limit());
        System.out.println("*******************************");
        
        while (ib.hasRemaining()) {
            int i = ib.get();
            System.out.println(i);
        }
    }
}

运行结果:

*******************************
256
7
*******************************
11
42
47
1811
143
811
1016

        将flip()替换成rewind()如下:

package com.bijian.study;

import java.nio.*;

public class IntBufferDemo {

    /**
    * @param args
    */
    private static final int BSIZE = 1024;

    public static void main(String[] args) {

        ByteBuffer bb = ByteBuffer.allocate(BSIZE);
        IntBuffer ib = bb.asIntBuffer(); // view buffer

        // 存储int的数组
        ib.put(new int[] { 11, 42, 47, 99, 143, 811, 1016 });

        // 绝对位置读写
        //System.out.println(ib.get(3));

        System.out.println("*******************************");
        System.out.println(ib.limit());
        ib.put(3, 1811);
        //ib.flip();
        ib.rewind();
        System.out.println(ib.limit());
        System.out.println("*******************************");
        
        while (ib.hasRemaining()) {
            int i = ib.get();
            System.out.println(i);
        }
    }
}

运行结果:

*******************************
256
256
*******************************
11
42
47
1811
143
811
1016
0
0
0
0
0
...

        我们看到除了打印出数组中我们设置的内容之外,还会在后面打印出一系列自动设置的零值。

文章来源:http://blog.csdn.net/cnweike/article/details/6942024

猜你喜欢

转载自bijian1013.iteye.com/blog/2307876
今日推荐