2 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
有可能WriteTo
復(fù)制超過 int32 字節(jié)的數(shù)據(jù)。
使用io.Reader
和io.Writer
接口,數(shù)據(jù)量受到給定切片大小的限制,int
對(duì)于當(dāng)前架構(gòu),切片的長(zhǎng)度限制為 。

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
Writer.Write()
方法簽名:
Write(p []byte) (n int, err error)
它寫入slice的內(nèi)容。引用規(guī)范:切片類型:
切片是底層數(shù)組的連續(xù)段的描述符......
眾所周知,切片有一個(gè)底層數(shù)組。再次引用規(guī)范:數(shù)組類型:
長(zhǎng)度是數(shù)組類型的一部分;它必須計(jì)算為可由 type 值表示的非負(fù)常量
int
。
因此數(shù)組的最大長(zhǎng)度受int
類型最大值的限制(2147483647
在 32 位和9223372036854775807
64 位架構(gòu)的情況下)。
所以回到Writer.Write()
方法:由于它寫入傳遞的切片的內(nèi)容,因此可以保證寫入的字節(jié)數(shù)不會(huì)超過int
.
現(xiàn)在WriteTo.WriteTo()
方法:
WriteTo(w Writer) (n int64, err error)
沒有提到切片或數(shù)組。您無法保證結(jié)果將適合int
,因此int64
不僅僅是合理的。
例子: BigBuffer
想象一個(gè)BigBuffer
臨時(shí)將數(shù)據(jù)寫入數(shù)組或切片的實(shí)現(xiàn)。該實(shí)現(xiàn)可以管理多個(gè)數(shù)組,以便如果一個(gè)數(shù)組已滿(例如達(dá)到最大整數(shù)),則繼續(xù)另一個(gè)數(shù)組?,F(xiàn)在,如果 thisBigBuffer
實(shí)現(xiàn)了WriteTo
接口并且您調(diào)用此方法將內(nèi)容寫入 an os.File
,則結(jié)果將大于 max int
。
- 2 回答
- 0 關(guān)注
- 280 瀏覽
添加回答
舉報(bào)