Java Buffer duplicate() 方法及实例

来源:这里教程网 时间:2026-02-17 20:37:14 作者:

Java Buffer duplicate() 方法及实例

java.nio.Buffer 类的 duplicate() 方法是用来创建一个新的缓冲区,共享这个缓冲区的内容。新的缓冲区的内容将是这个缓冲区的内容。这个缓冲区的内容的变化将在新的缓冲区中可见,反之亦然;两个缓冲区的位置、极限和标记值将是独立的。新缓冲区的容量、极限、位置和标记值将与这个缓冲区的相同。当且仅当这个缓冲区是直接的,新的缓冲区将是直接的;当且仅当这个缓冲区是只读的,它将是只读的。

语法

public abstract Buffer duplicate()

返回值: 该方法返回承载先前缓冲区内容的新缓冲区。

下面是一些例子来说明 duplicate() 方法。

例子1: 直接使用ByteBuffer

// Java program to demonstrate// duplicate() method  import java.nio.*;import java.util.*;  public class GFG {      public static void main(String[] args)    {          // Declaring the capacity of the ByteBuffer        int capacity = 4;          // Creating the ByteBuffer        try {              // creating object of ByteBuffer            // and allocating size capacity            ByteBuffer bb1                = ByteBuffer.allocate(capacity);              // putting the int to byte typecast            // value in ByteBuffer            bb1.put((byte)20);            bb1.put((byte)30);            bb1.put((byte)40);            bb1.put((byte)50);            bb1.rewind();              // print the Original ByteBuffer            System.out.println("Original ByteBuffer:  "                               + Arrays.toString(bb1.array()));              // Creating a duplicate copy of ByteBuffer            // using duplicate() method            ByteBuffer bb2 = bb1.duplicate();              // print the duplicate copy of ByteBuffer            System.out.print("\nDuplicate ByteBuffer: "                             + Arrays.toString(bb2.array()));        }          catch (IllegalArgumentException e) {              System.out.println("Exception thrown : " + e);        }          catch (ReadOnlyBufferException e) {              System.out.println("Exception thrown : " + e);        }    }}

输出:

Original ByteBuffer:  [20, 30, 40, 50]Duplicate ByteBuffer: [20, 30, 40, 50]

实例2: 使用只读的ByteBuffer

// Java program to demonstrate// duplicate() method  import java.nio.*;import java.util.*;  public class GFG {      public static void main(String[] args)    {          // Declaring the capacity of the ByteBuffer        int capacity = 4;          // Creating the ByteBuffer        try {              // creating object of ByteBuffer            // and allocating size capacity            ByteBuffer bb1                = ByteBuffer.allocate(capacity);              // putting the int to byte typecast            // value in ByteBuffer            bb1.put((byte)20);            bb1.put((byte)30);            bb1.put((byte)40);            bb1.put((byte)50);            bb1.rewind();              // print the Original ByteBuffer            System.out.println("Original ByteBuffer:  "                               + Arrays.toString(bb1.array()));              // Creating a read-only copy of ByteBuffer            // using asReadOnlyBuffer() method            ByteBuffer readonly = bb1.asReadOnlyBuffer();              // print the read-only copy of ByteBuffer            System.out.print("\nRead-only ByteBuffer:  ");            while (readonly.hasRemaining())                System.out.print(readonly.get() + ", ");            System.out.println("");              // Rewinding the readonly ByteBuffer            readonly.rewind();              // Creating a duplicate copy of ByteBuffer            // using duplicate() method            ByteBuffer bb2 = readonly.duplicate();              // print the duplicate copy of ByteBuffer            System.out.print("\nDuplicate copy of "                             + "read-only ByteBuffer:  ");              while (bb2.hasRemaining())                System.out.print(bb2.get() + ", ");            System.out.println("");        }          catch (IllegalArgumentException e) {              System.out.println("Exception thrown : " + e);        }          catch (ReadOnlyBufferException e) {              System.out.println("Exception thrown : " + e);        }    }}

输出:

Original ByteBuffer:  [20, 30, 40, 50]Read-only ByteBuffer:  20, 30, 40, 50, Duplicate copy of read-only ByteBuffer:  20, 30, 40, 50,

参考资料: https://docs.oracle.com/javase/9/docs/api/java/nio/Buffer.html#duplicate-

相关推荐