Java Buffer.duplicate() 方法及代码示例

创建一个共享当前缓冲区内容的新缓冲区

初见版本

9

定义

public abstract Buffer duplicate()

返回值

返回一个新的 Buffer

说明

新缓冲区的内容就是这个缓冲区的内容, 此缓冲区内容的更改将在新缓冲区中可见,反之亦然. 但两个缓冲区的位置、限制和标记值将是独立的.

新缓冲区初始的容量、限制、位置和标记值将与此缓冲区的相同. 当且仅当此缓冲区是直接的时, 新缓冲区将是直接的; 并且当且仅当此缓冲区是只读的时, 它将是只读的.

示例

使用 duplicate() 生成一个共享内容的新缓冲区的示例

package com.yi21.buffer;

import java.nio.Buffer;
import java.nio.ByteBuffer;

public class Yi21BufferDuplicate {

    public static void main(String[] args) {
        
        ByteBuffer buffer = ByteBuffer.wrap("Hello 21yi".getBytes());
        ByteBuffer newBuffer = buffer.duplicate();
        showStatus(buffer, true);
        showStatus(newBuffer, false);

        System.out.println("get且设置限制后:");
        buffer.get();
        buffer.get();
        buffer.get();
        buffer.limit(5);
        showStatus(buffer, true);
        showStatus(newBuffer, false);

    }

    private static void showStatus(Buffer buffer, boolean isOld) {
        String tag = isOld? "旧": "新";
        System.out.println(tag + "* 缓冲区限制: " + buffer.limit());
        System.out.println(tag + "* 缓冲区位置: " + buffer.position());
    }

}

执行结果为 :

旧* 缓冲区限制: 10
旧* 缓冲区位置: 0
新* 缓冲区限制: 10
新* 缓冲区位置: 0
get且设置限制后:
旧* 缓冲区限制: 5
旧* 缓冲区位置: 3
新* 缓冲区限制: 10
新* 缓冲区位置: 0