木木甫 2017-10-21 03:10 采纳率: 0%
浏览 411

java nio 创建buffer的疑问

以bytebuffer为例
allocate方法的源码

  public static ByteBuffer allocate(int capacity) {
        if (capacity < 0)
            throw new IllegalArgumentException();
        return new HeapByteBuffer(capacity, capacity);
    }

heapbytebuffer的源码 。只不过调用的bytebuffer的构造器

 HeapByteBuffer(int cap, int lim) {            // package-private

        super(-1, 0, lim, cap, new byte[cap], 0);
        /*
        hb = new byte[cap];
        offset = 0;
        */




    }

为什么不直接调用bytebuffer的构造器,而是要通过heapbytebuffer调用bytebuffer构造器

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 01:41
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Java中,allocatenew是不同的操作。allocate是在堆上分配一个新的内存块,并返回一个新的ByteBuffer对象。而new则是创建一个对象并初始化它。

    如果你想要创建一个新的ByteBuffer对象,你首先需要确定它的大小(即容量),然后使用allocate方法来获取这个大小的ByteBuffer对象。这样做的目的是为了确保你得到的是正确大小的ByteBuffer对象,而不是试图创建一个比实际需求大的ByteBuffer对象。

    以下是一个简单的例子:

    public class Main {
        public static void main(String[] args) {
            ByteBuffer buffer = ByteBuffer.allocate(10); // 创建一个长度为10的缓冲区
            System.out.println(buffer.capacity()); // 输出10
            System.out.println(buffer.position()); // 输出0
            System.out.println(buffer.limit()); // 输出10
        }
    }
    

    在这个例子中,我们首先创建了一个长度为10的ByteBuffer对象,然后打印了其容量、位置和界限,可以看到它们都是10。这表明我们在正确地使用allocate方法。

    评论

报告相同问题?