3 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
從文檔:
buffer()
創(chuàng)建一個(gè)新的 big-endian Java 堆緩沖區(qū),其初始容量相當(dāng)小,可按需無限擴(kuò)展其容量。
buffer(int initialCapacity)
創(chuàng)建一個(gè)新的具有指定容量的 big-endian Java 堆緩沖區(qū),它可以按需無限擴(kuò)展其容量。新緩沖區(qū)的 readerIndex 和 writerIndex 為 0。
所以,buffer(int)
做同樣的事情,buffer()
但具有指定的起始容量。如果您知道需要比默認(rèn)容量更大的容量,它的性能會(huì)更好,因?yàn)槿绻萘坎蛔?,它就不必繼續(xù)擴(kuò)展。編輯:另外,正如@yelliver 所說,您可以通過指定來節(jié)省內(nèi)存,這可能取決于您創(chuàng)建的緩沖區(qū)對象的數(shù)量(或取決于緩沖區(qū)的大?。?。
看起來buffer(int)
還設(shè)置了一些buffer()
可能不會(huì)的索引。

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
不同之處在于它們具有不同的初始容量。
請參閱buffer()
文檔:
創(chuàng)建一個(gè)新的 big-endian Java 堆緩沖區(qū),初始容量相當(dāng)小,可按需無限擴(kuò)展其容量。
和buffer(int initialCapacity)
文檔:
創(chuàng)建一個(gè)具有指定容量的新的 big-endian Java 堆緩沖區(qū),它可以按需無限擴(kuò)展其容量。

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
在一般Java中,很多情況下你可以通過容量或不通過,兩者都可以。如果不傳容量,則默認(rèn)容量,容量滿時(shí)自動(dòng)擴(kuò)容。例如:
String[] arr = list.toArray(new String[list.size()]);
//OR
String[] arr = list.toArray(new String[0]);
List<String> list = new ArrayList<>(10);
//OR
List<String> list = new ArrayList<>();
如果讓默認(rèn)容量:
優(yōu)點(diǎn):無需關(guān)心容量(顯然)
缺點(diǎn):如果您打算使用小于默認(rèn)容量的小尺寸,則會(huì)浪費(fèi)內(nèi)存。
如果你通過了你的意圖能力:
優(yōu)點(diǎn):節(jié)省內(nèi)存,您可以準(zhǔn)確分配所需的內(nèi)存。
缺點(diǎn):有時(shí)您無法從一開始就知道確切的尺寸,或者尺寸的計(jì)算很復(fù)雜
添加回答
舉報(bào)