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-
